[英]undefined reference during linkage for a static pointer class member in C++
抱歉,如果這是重復的。
這是我無法理解的有關靜態指針類成員的一個示例代碼。
#include <iostream>
class MyField {
public:
MyField() { std::cout << "ctr for MyField\n"; }
~MyField() { std::cout << "dtr for MyField\n"; }
friend std::ostream &operator<<(std::ostream &os, MyField field) {
os << "dump for MyField with addr: " << &field << std::endl;
return os;
}
};
class MyClass {
private:
static MyField field_;
public:
static MyField *p_field_;
static void setField(MyField const &field) { field_ = field; }
static void setPField(MyField *p_field) { p_field_ = p_field; }
static void dumpField() { std::cerr << "field_: " << field_; }
static void dumpPField() { std::cerr << "p_field_: " << *p_field_; }
MyClass() { std::cout << "ctr for MyClass\n"; }
~MyClass() { std::cout << "dtr for MyClass\n"; }
};
int main(void) {
MyClass::setPField(NULL); /// undefined reference to MyClass::p_field_
MyClass::p_field_ = NULL; /// undefined reference to MyClass::p_field_
MyField field;
MyClass::setField(field); /// fine
MyClass::p_field_ = &field; /// undefined reference to MyClass::p_field_
MyClass::setPField(&field); /// undefined reference to MyClass::p_field_
MyClass();
MyClass::dumpField(); /// fine
MyClass::dumpPField(); /// fine
return 0;
}
對於類MyClass
,為什么Field field_
(setField)的集合起作用,而對於p_field_
(setPField)卻不起作用? 而且它仍然可以訪問p_field_
(dumpPField)的地址嗎?
順便說一句,無論是否使用--std=c++11
,我都嘗試了gcc4.8 / clang3.4。
加:
MyField * MyClass::p_field_ = NULL;
任何函數之外,例如int main() {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.