对于我不理解的静态成员变量,我遇到与boost::lexical_cast的链接错误。
这是一个展示问题的小样本(我知道这很愚蠢,我可以<< candy;但这表明我在lexical_cast中使用的问题很少见):
#include <iostream>
#include <boost/lexical_cast.hpp>
using namespace std;
class Test
{
public:
void print_candy() const
{
cout << "candy is: " << boost::lexical_cast<string>(candy) << endl;
}
private:
static const unsigned int candy = 0;
};
int
main(int argc, char *argv[])
{
Test t;
t.print_candy();
return 0;
}
编译时会产生以下错误:
$ /opt/gcc-google-4.8/bin/g++ -Wall -I/usr/include --std=c++11 test.cc -o test
/tmp/cc9MV6cQ.o:test.cc:function Test::print_candy() const: error: undefined reference to 'Test::candy'
collect2: error: ld returned 1 exit status
很明显,糖果是定义的。如果我删除词汇演员并将糖果重定向到外面,程序会编译并链接正常。
一些观察结果:
所以我想明白: