"no match for 'operator='" 在 C++ 中,尝试制作链表

"no match for 'operator='" in c++, trying to make a linked list

本文关键字:链表 match no for operator C++      更新时间:2023-10-16

我正在使用代码::块编写一个C++程序。我想列出一份双重链接的清单。

我的计划是创建一个名为geoPoint的节点类,该类具有指向其他节点的指针northsouth。我已经编写了一个测试函数来创建和链接两个节点,然后使用第三个节点遍历它们。到目前为止,我拥有的是:

#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= &currentPoint.north;
    currentPoint.showDesc();
    cin.get();
    return 0;
};

main()在到达线路currentPoint= &currentPoint.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;

在函数setNorthsetSouth中,您正在获取临时对象的地址(参数(。一旦函数返回,此指针将无效。

你有没有打算写

currentPoint= *currentPoint.north;