переменная имеет внутреннюю связь, но не определена

У меня есть этот .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];

В чем здесь проблема?

8

Решение

Просто определите это. После определения класса, но до конца анонимного пространства имен добавьте эту строку:

DenseMap<Function*, DenseMap<Instruction*,Invariant*> > Invariant::Invariants;

Это создаст статический член в каждом модуле перевода, который включает этот заголовок (это нормально, потому что он находится в анонимном пространстве имен, которое уникально для каждого модуля перевода). Это, вероятно, не то, что вы хотите, но это следует из определения Invariant в анонимном пространстве имен. Если вместо этого вы используете именованное пространство имен, вы можете поместить определение Invariants в исходный файл и иметь только один объект, общий для всего кода.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]