无法在Visual Studio 2010中的自引用对象中指定指针

时间:2010-10-03 18:42:43

标签: c++ visual-c++

我正在学习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;
}
<

2 个答案:

答案 0 :(得分:2)

使用operator *假定您处理存储在此变量中的地址所驻留的某些数据。我们来看看您的代码:

*sibling = *p;

您尝试按值复制。这是错误的,因为兄弟姐妹指向无处。它甚至不是NULL,它是不可预测的。正确的行将是:

sibling = p;

所以你告诉那将存储指向另一个实例的指针。

答案 1 :(得分:0)

一个值得注意的问题是你在getSibling()中按值返回,所以你会得到兄弟的副本而不是真正的兄弟。您所做的任何更改都将是临时对象。

正如其他人所说,你的addSibling函数应该是sibling = p。这是你错误的根源。

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