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

标签 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...

我是不是漏掉了一些简单的东西? static int 不应该可用于 C1 类来更改它吗?此外,我正在将其作为 Clang 库的一部分进行开发。另外,如果有帮助,我可以分享 Makefile。

最佳答案

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

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

关于C++ 共享库不允许静态数据成员访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18861301/

相关文章:

objective-c - 要链接哪个 OSX 库(命令行)以使用 NSLog?

c++ - 为什么 clang++ 和 gcc/g++ 生成不同链接的可执行文件

c++ - std::move 为 "in-place operation"

c++ - 如何访问VTK的类枚举域

c++ - 使用 BST 实现队列

clang - 如何在wasm中更改导入模块名称 "env"?

build - 尝试构建LLVM和Clang时出现问题

c++ - 确定两条线段是否相交的代码有什么问题?

c++ - 如何将 CodeSynthesis-XSD 包含到自己的应用程序中?

clang - 建筑 clang 永远