无法在Visual Studio 2010中的自引用对象中分配指针 我正在学习C++,现在我有一些问题我不知道答案。我创建了这个头文件Object1.h,可以编译这个文件,但是当我运行Test.cpp时,Visual Studio抛出了一个错误,因为*同级的访问冲突。奇怪的是,我可以使用Dev C+运行它,它只返回值2。因此,我想问为什么分配*同级会产生错误,为什么我不能使用setAddress()更改人员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; }

无法在Visual Studio 2010中的自引用对象中分配指针 我正在学习C++,现在我有一些问题我不知道答案。我创建了这个头文件Object1.h,可以编译这个文件,但是当我运行Test.cpp时,Visual Studio抛出了一个错误,因为*同级的访问冲突。奇怪的是,我可以使用Dev C+运行它,它只返回值2。因此,我想问为什么分配*同级会产生错误,为什么我不能使用setAddress()更改人员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; },c++,visual-c++,C++,Visual C++,一个值得注意的问题是,您在getSibling()中按值返回,因此您将获得同级的副本,而不是实际同级的副本。您所做的任何更改都将更改为临时对象 正如其他人所指出的,您添加的同级函数应该是sibling=p。这就是你错误的根源 但是一定要纠正getSibling函数,否则setAddress将无法执行您想要的操作。一个值得注意的问题是,您在getSibling()中按值返回,因此您将获得同级的副本,而不是实际同级的副本。您所做的任何更改都将更改为临时对象 正如其他人所指出的,您添加的同级函数应该是

一个值得注意的问题是,您在
getSibling()
中按值返回,因此您将获得同级的副本,而不是实际同级的副本。您所做的任何更改都将更改为临时对象

正如其他人所指出的,您添加的同级函数应该是
sibling=p
。这就是你错误的根源


但是一定要纠正getSibling函数,否则setAddress将无法执行您想要的操作。

一个值得注意的问题是,您在
getSibling()
中按值返回,因此您将获得同级的副本,而不是实际同级的副本。您所做的任何更改都将更改为临时对象

正如其他人所指出的,您添加的同级函数应该是
sibling=p
。这就是你错误的根源


但请务必更正getSibling函数,否则setAddress将无法执行您想要的操作。

使用运算符*假定您处理存储在此变量中的地址所驻留的某些数据。让我们回顾一下您的代码:

*sibling = *p;
您正在尝试按值复制。这是错误的,因为兄弟姐妹没有指向任何地方。它甚至不是空值,它是不可预测的。正确的行是:

sibling = p;

所以您可以告诉我们,它将存储指向另一个实例的指针

使用运算符*假定您处理存储在此变量中的地址所驻留的某些数据。让我们回顾一下您的代码:

*sibling = *p;
您正在尝试按值复制。这是错误的,因为兄弟姐妹没有指向任何地方。它甚至不是空值,它是不可预测的。正确的行是:

sibling = p;

所以您可以告诉我们,它将存储指向另一个实例的指针

你能提供你得到的确切错误吗?你知道哪一行抛出了错误吗?嗨,Josh,我在Object1.h的函数addSibling()第32行得到了一个错误。“同级”变量出错。错误:无法计算表达式。但如果我使用Dev-C编译和运行,则不会通知任何错误。您能提供您得到的确切错误吗?你知道哪一行抛出了错误吗?嗨,Josh,我在Object1.h的函数addSibling()第32行得到了一个错误。“同级”变量出错。错误:无法计算表达式。但如果我使用Dev-C编译并运行,则不会通知任何错误。