我有这个.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];这里有什么问题?
发布于 2013-04-08 22:28:31
只要定义它就行了。在类定义之后,但在匿名命名空间的末尾之前,添加以下行:
DenseMap<Function*, DenseMap<Instruction*,Invariant*> > Invariant::Invariants;这将在每个包含此标头的翻译单元中创建静态成员(这是可以的,因为它位于匿名命名空间中,每个翻译单元都是唯一的)。这可能不是您想要的,但这是在匿名名称空间中定义Invariant之后的结果。如果改用命名空间,则可以将Invariants的定义放入源文件中,并且所有代码只共享一个对象。
https://stackoverflow.com/questions/15871341
复制相似问题