我正在学习C ++,目前我有些问题我不知道答案。我创建此头文件Object1.h并可以编译此文件但是当我运行Test.cpp时,Visual Studio会因为* sibling的访问冲突而抛出错误。奇怪的是我可以使用Dev C +运行它并且它只返回值2.因此我想问为什么分配* sibling会产生错误以及为什么我不能使用setAddress()更改Person B的地址。如果有人能给我一些答案或提示,我将非常感激。提前谢谢。
//This is Object1.h
#include <
iostream>
using namespace std;
class Person{
public:
Person(int ID);
void setAddress(string addr);
string getAddress();
void addSibling(Person *p);
Person getSibling();
int ID;
private:
string address;
Person *sibling;
};
Person::Person(int ID){
this->ID = ID;
}
void Person::setAddress(string addr){
this->address = addr;
}
string Person::getAddress(){
return address;
}
void Person::addSibling(Person *p){
*sibling = *p;
}
Person Person::getSibling(){
return *sibling;
}
<
答案 0 :(得分:2)
使用operator *假定您处理存储在此变量中的地址所驻留的某些数据。我们来看看您的代码:
*sibling = *p;
您尝试按值复制。这是错误的,因为兄弟姐妹指向无处。它甚至不是NULL,它是不可预测的。正确的行将是:
sibling = p;
所以你告诉那将存储指向另一个实例的指针。
答案 1 :(得分:0)
一个值得注意的问题是你在getSibling()
中按值返回,所以你会得到兄弟的副本而不是真正的兄弟。您所做的任何更改都将是临时对象。
正如其他人所说,你的addSibling函数应该是sibling = p
。这是你错误的根源。
但请务必更正您的getSibling函数,否则您的setAddress将无法执行您想要的操作。