可能重複:
What does it mean to have an undefined reference to a static member?C++成員函數訪問私有靜態變量?
我不知道爲什麼我有錯誤「未定義的參考`TT ::我'」如果我實現類的聲明之外的功能? 這裏是代碼..
class TT{
private:
static int i;
public:
void t();
};
void TT::t(){
i=0;
}
可能重複:
What does it mean to have an undefined reference to a static member?C++成員函數訪問私有靜態變量?
我不知道爲什麼我有錯誤「未定義的參考`TT ::我'」如果我實現類的聲明之外的功能? 這裏是代碼..
class TT{
private:
static int i;
public:
void t();
};
void TT::t(){
i=0;
}
它無關,與在那裏你定義的功能,那就是你沒有定義靜態成員變量,你只宣佈它。您需要將其定義放在課程外部,例如
int TT::i;
靜態變量保存在與任何類的任何實例不同的內存部分中。這是因爲他們不是任何階級的實例的一部分。
下面的代碼編譯是因爲函數t永遠不會被調用。
class TT
{
private:
static int i;
public:
void t()
{
i=0;
}
};
int main(int argc, char *argv[])
{
qWarning() << "hi";
TT * t = new TT();
//t->t();
return 0;
}
但是,此代碼不complie,因爲T稱爲
class TT
{
private:
static int i;
public:
void t()
{
i=0;
}
};
int main(int argc, char *argv[])
{
qWarning() << "hi";
TT * t = new TT();
t->t();
return 0;
}
你都不允許有你就不是在C使用未定義的引用++(和C爲此事)。出於某種原因,我不確定,編譯器似乎認爲這個代碼引用了我,當上面那些符合條件的東西沒有被引用時才引用它(有關爲什麼)。
class TT
{
private:
static int i;
public:
void t();
};
//int TT::i = 0;
void TT::t(){
i=0;
}
功能例如,用定義的靜態:
class TT
{
private:
static int i;
public:
void t();
};
int TT::i = 0;
void TT::t(){
i=0;
}
他得到的'未定義的引用'錯誤是一個鏈接器錯誤,而不是編譯器錯誤。 – 2012-03-23 04:27:29
絕對正確。我有一個不好的習慣,就是在我的「Compile Output」控制檯中調用任何出現編譯器錯誤的東西。 – 2012-03-23 04:35:10
這是一個更完整的答案! :d – kotoko 2016-11-17 08:42:26
未定義參考`TT ::我」
是因爲你還沒有外部類中定義的靜態數據成員。所有靜態數據成員必須在使用它們之前在類之外定義。
class TT
{
private:
static int i;
public:
void t();
};
void TT::t()
{
i=0;
}
int TT::i=0; // define it outside the class. and if possible initialize
+1刪除我的回覆,因爲我意識到你已經釘住了它。 – Lou 2012-03-23 04:11:33
它的工作原理,謝謝 – user956159 2012-03-23 04:14:01