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

标签 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

当我编译 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;

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

关于c++ - 变量具有内部链接但未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15871341/

相关文章:

c++ - 如何提取字符串中的整数?

c++ - 如何将编码从 C 转换为 C++?

c++ - QML 对象初始化期间函数调用的顺序是确定性的吗?

c++ - 为什么这些具有外部链接的名称不表示同一实体?

c++ - 为什么下面的方法会得到内部链接?

指向全局变量 : Different Pointers 的 C 指针

c++ - 除了内部/外部链接之外,类型是否只有 'linkage'?

c++ - static const 成员是否有内部链接?

c++ - 使用 GMP/ARB 矩阵减少 OpenMP

c++ - C++ 中将内置类型 (int) 转换为 bool 的首选方法是什么?