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

Gia*_*bue 8 c++ linkage

我有这个.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
Run Code Online (Sandbox Code Playgroud)

当我编译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];
Run Code Online (Sandbox Code Playgroud)

这有什么问题?

Pet*_*ker 7

只需定义它.在类定义之后但在匿名命名空间结束之前添加以下行:

DenseMap<Function*, DenseMap<Instruction*,Invariant*> > Invariant::Invariants;
Run Code Online (Sandbox Code Playgroud)

这将在包含此标头的每个翻译单元中创建静态成员(这没关系,因为它位于匿名名称空间中,这对于每个翻译单元都是唯一的).这可能不是你想要的,但这是Invariant在匿名命名空间中定义的.如果使用命名的命名空间,则可以将定义Invariants放入源文件中,并且只有一个对象由所有代码共享.