C ++共享库不允许静态数据成员访问

时间:2013-09-17 23:03:36

标签: c++ clang

我有一个.cpp文件,看起来像这样:

//other code
namespace {
    class C1;
    class C2;
    class C2{
         public: static int counter;
         //member functions here
    };
    class C1{
         //other code
         C2::counter = 10;
    };
}

当我运行'make'时,我收到以下错误:

relocation R_386_GOTOFF against undefined symbol '(anonymous namespace)::C2::counter' can not be used when making a shared object...

我在这里错过了一些简单的东西吗?不应该为C1类提供静态int来改变它吗?此外,我正在开发这个作为Clang库的一部分。此外,如果有帮助,我可以共享Makefile。

1 个答案:

答案 0 :(得分:1)

您错过了提供静态变量的定义。此定义必须在类外部发生,并且只允许一个定义。通常的方法是在实现文件中提供定义。

因为您是直接使用它而没有提供任何定义,所以您收到错误。