"нет совпадения для 'operator ='" в c ++, пытается создать связанный список - PullRequest
0 голосов
/ 14 сентября 2011

Я пишу программу на C ++, используя Code :: Blocks. Я хочу сделать двусвязный список.

Я планирую создать класс узлов с именем 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= &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. Что я делаю не так?

Ответы [ 3 ]

3 голосов
/ 14 сентября 2011

currentPoint относится к типу geoPoint.&currentPoint.north относится к типу geoPoint**.& является оператором address-of : вы берете адрес geoPoint*, в котором хранится адрес geoPoint.

Если вы хотите currentPointчтобы сохранить копию geoPoint, к которой относится currentPoint.north, используйте оператор разыменования *, как в *currentPoint.north.Однако, если вы просто хотите сослаться на объект, не копируя его, измените currentPoint на geoPoint* и напишите вместо этого:

currentPoint = currentPoint->north;
2 голосов
/ 14 сентября 2011

В функциях setNorth и setSouth вы берете адрес временного объекта (параметр). Этот указатель будет недействительным, как только функция вернется.

0 голосов
/ 14 сентября 2011

Вы случайно не намеревались написать

currentPoint= *currentPoint.north;

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...