变量具有内部链接,但未定义

variable has internal linkage but is not defined

本文关键字:未定义 链接 内部 变量      更新时间:2023-10-16

我有这个。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的定义放入源文件中,并且所有代码只共享一个对象。