非常简单地说:
我有一个主要由静态公共成员组成的类,所以我可以将类似的函数组合在一起,但仍然需要从其他类/函数中调用它们.
无论如何,我在我的类公共范围中定义了两个静态unsigned char变量,当我尝试在同一个类的构造函数中修改这些值时,我在编译时遇到"未解析的外部符号"错误.
class test { public: static unsigned char X; static unsigned char Y; ... test(); }; test::test() { X = 1; Y = 2; }
我是C++的新手,所以对我很轻松.为什么我不能这样做?
您忘记添加定义以匹配您的X和Y声明
unsigned char test::X; unsigned char test::Y;
某处.您可能还想初始化静态成员
unsigned char test::X = 4;
再次,你在定义中(通常在CXX文件中)不在声明中(通常在.H文件中)
类声明中的静态数据成员声明不是它们的定义.要定义它们,您应该在.CPP
文件中执行此操作以避免重复的符号.
您可以声明和定义的唯一数据是整数静态常量.(值enums
也可以用作常数值)
您可能希望将代码重写为:
class test { public: const static unsigned char X = 1; const static unsigned char Y = 2; ... test(); }; test::test() { }
如果你想有修改你静态变量的能力(换句话说,当它是不恰当的将它们声明为const),也可以分开你的代码之间.H
,并.CPP
以下列方式:
.H :
class test { public: static unsigned char X; static unsigned char Y; ... test(); };
.CPP:
unsigned char test::X = 1; unsigned char test::Y = 2; test::test() { // constructor is empty. // We don't initialize static data member here, // because static data initialization will happen on every constructor call. }