变量具有内部链接,但未定义
variable has internal linkage but is not defined
我有这个。h文件:
namespace{
class Invariant{
public:
Invariant(z3::expr e,Instruction *i):Expr(e),I(i){
DenseMap<Instruction*,Invariant*> FunMap = Invariants[F];
}
private:
//static map
static DenseMap<Function*, DenseMap<Instruction*,Invariant*> >Invariants;
};
}//end of anonymous namespace
当我编译clang说:
Invariant.h:46:65: warning: variable '<anonymous namespace>::Invariant::Invariants' has internal linkage but is not defined
static DenseMap<Function*, DenseMap<Instruction*,Invariant*> >Invariants;
^
Invariant.h:26:48: note: used here
DenseMap<Instruction*,Invariant*> FunMap = Invariants[F];
有什么问题吗?
定义它。在类定义之后但在匿名命名空间结束之前添加这一行:
DenseMap<Function*, DenseMap<Instruction*,Invariant*> > Invariant::Invariants;
这将在包含此头的每个翻译单元中创建静态成员(这是可以的,因为它位于匿名命名空间中,这对每个翻译单元都是唯一的)。这可能不是您想要的,但这是在匿名名称空间中定义Invariant
的结果。如果使用命名空间,则可以将Invariants
的定义放入源文件中,并且所有代码只共享一个对象。
相关文章:
- node-gyp 在 macOS 上未正确链接库
- 使用标头保护的多个定义链接错误
- 可视化工作室项目中C++预编译标头未正确链接
- 虚幻未完全链接
- C++不使用"inline"或"static"无类函数的关键字时出现重定义链接错误
- 从自定义链接列表中打印值时,循环陷入无限时
- OpenCV源与CUDA编译生成多个定义链接错误
- 在源文件中定义链接选项C++
- 如果两个静态库包含 pugixml objs,如何避免与 pugixml 的“已定义”链接错误
- Qt Creator未定义套接字-Linux
- SDL加载项库未正确链接
- CMake "OBJECT" 库:叮当未正确链接
- 未打印链接列表
- 使用 JNI 将 C# 加载到 Java 项目中的未解决链接错误
- 库未正确链接/包含
- 已定义链接器错误
- Boost.Program_options在Clang下未正确链接
- Makefile中未完成链接
- 来自优化级别的C++多定义链接器错误
- 多重定义:链接时出现错误