मैं इस ज फ़ाइल है:चर आंतरिक संबंध है, लेकिन निर्धारित नहीं है
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 <फ़ंक्शन *, DenseMap <निर्देश *, Invariant *>> Invariant :: Invariants;' की आवश्यकता है। – WhozCraig
यदि मैं ऐसा करता हूं, तो लिंकिंग चरण में प्रकट होता है: llvm [0]: डीबग + आवेषण लोड करने योग्य मॉड्यूल Acsl.so '/ home/giacomo/llvmtmp/llvm-csfv/डीबग + आवेषण/lib/Acsl खोलने में त्रुटि। तो ': /home/giacomo/llvmtmp/llvm-csfv/Debug+Asserts/lib/Acsl.so: अपरिभाषित प्रतीक: _ZN12_GLOBAL__N_19Invariant10InvariantsE -लोड अनुरोध अनदेखा किया गया। –
मुझे नहीं लगता कि आपने "स्थिर" शब्द रखा था जब आपने इसे अपनी हेडर फ़ाइल से कॉपी किया था, है ना? इसे .cpp फ़ाइल में घोषित नहीं किया जाना चाहिए 'स्थिर' होना चाहिए। इसे शामिल करने के लिए मेरा बुरा। उसके लिए माफ़ करना। – WhozCraig