我在 Mac OS X 上使用 Qt 4.7 和 Cmake 2.8.3 以及 g++ 4.2.1。
在我的一个文件中使用静态或全局变量时,我遇到了一个奇怪的链接器错误。 这是错误:
ld: duplicate symbol ColorTrail::calculateColorUniformLocation in CMakeFiles/GLBall.dir/src/DesktopMain.cpp.o and CMakeFiles/GLBall.dir/src/ColorTrail.cpp.o
collect2: ld returned 1 exit status
calculateColorUniformLocation 是类 ColorTrail 的静态成员...但它甚至根本没有用在 DesktopMain.cpp 中!
这是我尝试过的: 重命名变量并不能解决问题。 将变量移出类并使其成为一个普通的全局变量也不能解决问题
ColorTrail.h文件:
#ifndef COLORTRAIL
#define COLORTRAIL 9
#include "GlobalConstants.h"
#include <vector>
using namespace std;
class ColorTrail
{
private:
//note that this is NOT a Q_OBJECT
static GLint calculateColorUniformLocation;
//omitted for brevity
};
GLint ColorTrail::calculateColorUniformLocation;
#endif
DesktopMain.cpp 使用类 ColorTrail,但不是静态的,也从不引用变量。
任何人都知道 Qt 可能出了什么问题/有类似的问题吗?
最佳答案
您需要在 cpp 文件中而不是在头文件中定义静态变量。如果您在头文件中定义它,则包含此头文件的每个 cpp 文件都将获得自己的拷贝,因此链接器会提示重复符号。
关于c++ - 使用静态成员时出现链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8612206/