我正在使用代码::块编写一个C++程序。我想列出一份双重链接的清单。
我的计划是创建一个名为geoPoint
的节点类,该类具有指向其他节点的指针north
和south
。我已经编写了一个测试函数来创建和链接两个节点,然后使用第三个节点遍历它们。到目前为止,我拥有的是:
#include <iostream>
#include <string>
using namespace std;
class geoPoint
{
public:
geoPoint *north, *south;
private:
string description;
public:
void showDesc()
{
cout << description << endl;
};
void setDesc(string sourceText)
{
description=sourceText;
};
void setNorth(geoPoint sourcePoint)
{
north= &sourcePoint;
}
void setSouth(geoPoint sourcePoint)
{
south= &sourcePoint;
}
};
int main()
{
geoPoint testPoint,testPoint2,currentPoint;
string sourceText("testPoint");
string sourceText2("testPoint2");
testPoint.setDesc(sourceText);
testPoint2.setDesc(sourceText2);
testPoint.setNorth(testPoint2);
testPoint2.setSouth(testPoint);
currentPoint=testPoint;
currentPoint.showDesc();
currentPoint= ¤tPoint.north;
currentPoint.showDesc();
cin.get();
return 0;
};
main()
在到达线路currentPoint= ¤tPoint.north;
时崩溃。错误消息为:error: no match for 'operator=' in 'currentPoint = & currentPoint.geoPoint::north'
我认为a=&b
是将指针b
的未引用内容分配给变量a
的正确方法。我做错了什么?
currentPoint
属于geoPoint
类型。CCD_ 12属于CCD_。&
是运算符的地址:您取的是geoPoint*
的地址,它存储geoPoint
的地址。
如果希望currentPoint
保存currentPoint.north
所引用的geoPoint
的副本,请使用取消引用运算符*
,如*currentPoint.north
中所示。但是,如果您只想引用对象而不复制它,请将currentPoint
更改为geoPoint*
,并改为写以下内容:
currentPoint = currentPoint->north;
在函数setNorth
和setSouth
中,您正在获取临时对象的地址(参数(。一旦函数返回,此指针将无效。
你有没有打算写
currentPoint= *currentPoint.north;