2012-12-01 58 views
3

我必須使成員數據指針來獲取較少的數據副本。我已經寫了一些示例代碼。在標記「錯誤」的地方發生了一些錯誤。 如何正確做。什麼是成員數據指針的正確賦值語句

#include <iostream> 

class A { 
public: 
    A() { 
     stra="12345"; 
    } 
    virtual ~A() {} 
    string stra; 
} 

class B { 
public: 
    B(A *pt) { 
     strb=&(pt->stra); //Error.An assignment statement 
    } 
    virtual ~B() {} 
    string A::*strb;  //member data pointer from class A 
} 

int main() { 
    A ma; 
    B mb(&ma); 
    std::cout<< *(mb.strb) <<std::endl; //Error.print data 
} 

回答

2

實際上,你擁有的是標準指針,而不是指向成員的指針。下面的工作:

#include <iostream> 
#include <string> 

using namespace std; 


class A { 
public: 
    A() { 
     stra="12345"; 
    } 
    virtual ~A() {} 
    string stra; 
}; 

class B { 
public: 
    B(A *pt) { 
     strb=&(pt->stra); 
    } 
    virtual ~B() {} 
    string* strb; // <<<<<<<< THIS 
}; 

int main() { 
    A ma; 
    B mb(&ma); 
    std::cout<< *(mb.strb) <<std::endl; 
} 

有關指針數據成員的一些討論,請參見C++: Pointer to class data member

我不知道你與這一切去,而是一類具有實例保持指針在另一個班級的實例中的東西讓我覺得這是一個相當糟糕的設計。

+0

一開始我這樣做,但有一個error.You是正確的,看來在另一個地方有錯誤,謝謝。 – simon

0

string A::*strb;應該string* strb;

乙方應具有一個指向字符串對象,而不是一個指向一個字符串(?)

相關問題