static std::queue
(static 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();
}
}
}
};
如何解决?
static
数据成员需要单独定义。只需在.cpp
文件的类之外定义您的静态变量即可:std::queue<Efeito*> EfeitosVisuais::efeitos;
更新
变量必须具有唯一的一个定义,这样它才不会违反ODR - One definition rule。这就是为什么在.cpp
文件中定义它很重要的原因,因为如果它在.h
文件中,则头文件可能会包含在多个位置,这会导致错误。由于
c ++ 17
,您可以定义inline variables.:inline std::queue<Efeito*> efeitos;
还请注意,如果使用constexpr
,则变量隐式为inline
。