我必须制作一个成员数据指针才能获得更少的数据副本。我写了一些示例代码。我标记"错误"的地方发生了一些错误。如何做正确的事。
#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
}
实际上,您拥有的是标准指针,而不是指向成员的指针。以下方法将起作用:
#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++:指向类数据成员的指针
我不知道你对这一切要去哪里,但是让一个类的实例保持指向另一个类实例中事物的指针,我觉得这是一个相当糟糕的设计。
string A::*strb;
应该string* strb;
B 应该有一个指向字符串对象的指针,而不是指向 A 字符串(?) 的指针