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

C++ Shared Library not Allowing Static Data Member Access

本文关键字:数据成员 访问 静态 不允许 共享 C++      更新时间:2023-10-16

我有一个看起来像这样的.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...

我在这里错过了一些简单的东西吗? 静态 int 不应该可用于类 C1 来更改它吗? 此外,我正在将其作为 Clang 图书馆的一部分进行开发。另外,如果有帮助,我可以共享Makefile。

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

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