我不能使用静态std :: queue? [重复]

问题描述 投票:0回答:1
我想在同一个类的静态函数中使用static std::queuestatic std::queue<Efeito*> efeitos;)进行调用,但是我尝试了几种方法,但得到的一件事是错误:

undefined reference to EfeitosVisuais::efeitos'

这里是代码:

#include <iostream> #include <queue> #include "Efeito.h" #include "Efeitos Visuais/EfeitoPedregulho.h" class EfeitosVisuais { public: static std::queue<Efeito*> efeitos; static void AddEfeito(double x, double y,char efeito){ switch(efeito){ case 'P': EfeitoPedregulho *pedregulho = new EfeitoPedregulho(x,y); efeitos.push(pedregulho); break; } } static void Atualizar(int tempodejogo) { if(!efeitos.empty()) { for (int i = 0; i < efeitos.size(); i++) { efeitos.front()->Atualiza(tempodejogo); efeitos.push(efeitos.front()); efeitos.pop(); } } } };

如何解决?
c++ static-members
1个回答
2
投票
static数据成员需要单独定义。只需在.cpp文件的类之外定义您的静态变量即可:

std::queue<Efeito*> EfeitosVisuais::efeitos;

更新

变量必须具有唯一的一个定义,这样它才不会违反ODR - One definition rule。这就是为什么在.cpp文件中定义它很重要的原因,因为如果它在.h文件中,则头文件可能会包含在多个位置,这会导致错误。

由于

c ++ 17

,您可以定义inline variables.inline std::queue<Efeito*> efeitos;
还请注意,如果使用constexpr,则变量隐式为inline
© www.soinside.com 2019 - 2024. All rights reserved.