什么是成员数据指针的正确赋值语句

时间:2012-12-01 08:18:19

标签: c++

我必须创建一个成员数据指针以获得更少的数据副本。我已经编写了一些示例代码。在我标记"错误"的地方发生了一些错误。 怎么做正确。

#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 个答案:

答案 0 :(得分: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

我不知道你要去哪里这一切,但是让一个类的实例保持指向另一个类的实例内部的东西会让我觉得它是一个相当糟糕的设计。

答案 1 :(得分:0)

string A::*strb;应为string* strb;

B应该有一个指向字符串对象的指针,而不是指向A字符串(?)

的指针