Bu .h dosyası var tanımlanmadı: Ben clang diyor derlerkendeğişken iç bağlantı var ama
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
:
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];
Ne oluyor burada?
Statik sınıf değişkeniniz var. Bağlantı çözümü için her yerde uygun bir şekilde tanımlanmış mı (yüklenen soru, gösterdiğiniz mesajın cevabını oldukça belirgin hale getirdiğinden). Statik sınıf üyelerinin, sınıf içinde beyan edilmeleri ve sonra sınıf dışı olarak tanımlanması gerekir. Bu üstbilginin ilişkili .cpp dosyasında bir statik DenseMap> Invariant :: Invariants; –
WhozCraig
Bunu yaparsam, bağlantı aşamasında görüntülenir: llvm [0]: Hata Ayıklama + Öğeleri Yüklenebilir Modül Acsl.so '/ home/giacomo/llvmtmp/llvm-csfv/Debug + Asserts/lib/Acsl. Yani ': /home/giacomo/llvmtmp/llvm-csfv/Debug+Asserts/lib/Acsl.so: tanımsız sembol: _ZN12_GLOBAL__N_19Invariant10InvaryantlarE - yükleme isteği yoksayıldı. –
Bunu, başlık dosyanızdan kopyaladığınızda "statik" kelimesini tuttuğunuzu sanmıyorum, değil mi? .cpp dosyasında * statik * bildirilmemelidir. Onu eklemek benim için kötü. Bunun için üzgünüm. – WhozCraig