首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量具有内部链接,但未定义

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

Stack Overflow用户
提问于 2013-04-08 12:35:57
回答 1查看 14.9K关注 0票数 10

我有这个.h文件:

代码语言:javascript
复制
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时说:

代码语言:javascript
复制
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];

这里有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-08 22:28:31

只要定义它就行了。在类定义之后,但在匿名命名空间的末尾之前,添加以下行:

代码语言:javascript
复制
DenseMap<Function*, DenseMap<Instruction*,Invariant*> > Invariant::Invariants;

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15871341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档