7
我有這個.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
當我編譯鐺說:
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];
這裏有什麼問題嗎?
你有一個靜態類變量。是否可以在任何地方正確定義鏈接解析(加載的問題,因爲您顯示的信息使得答案相當明顯)。靜態類成員需要在類中聲明,然後在類外定義。在這個頭文件的關聯.cpp文件中,您需要一個靜態DenseMap> Invariant :: Invariants;'。 –
WhozCraig
2013-04-08 04:42:55
如果我這樣做,在鏈接階段出現: llvm [0]:鏈接調試+聲明可加載模塊Acsl.so 打開'/ home/giacomo/llvmtmp/llvm-csfv/Debug + Asserts/lib/Acsl時出錯。所以':/home/giacomo/llvmtmp/llvm-csfv/Debug+Asserts/lib/Acsl.so:undefined symbol:_ZN12_GLOBAL__N_19Invariant10InvariantsE -load request ignored ignored。 – 2013-04-08 04:46:52
當你從頭文件中複製出來時,我不認爲你保留了「靜態」一詞,是嗎?它不應該在.cpp文件中聲明爲'static'。包括它在內我不好。對於那個很抱歉。 – WhozCraig 2013-04-08 04:49:24