Базовый операнд имеет тип без указателя … но это указатель?

Я работаю над проектом C ++, который имеет дело с графиками. Он обладает множеством функциональных возможностей, связанных с классом «Node» и классом «Edge».

Сначала Edge хранит копии своего начального узла и конечного узла; что-то вроде:

class Edge{
...
private:
Node m_start, m_end;
...
}

Чтобы сделать некоторые функции модификации графа более эффективными, я решил сделать указатели классов Edge вместо них на начальный и конечный узлы:

class Edge{
...
private:
Node* m_start, m_end;
...
}

Таким образом, я внес изменения в файлы / связанные функции cpp, чтобы обеспечить надлежащий доступ (например, изменение .с ->с). Одним из примеров является функция печати:

void
Edge::Print(ostream& _os){
_os << "EdgeID = " << m_id << endl
<< "Connects nodes: " << m_start->GetIndex() << " and " << m_end->GetIndex() << endl;
}

Но когда я пытаюсь скомпилировать, я получаю это сообщение (и аналогичные для тех же самых изменений в других местах):

Models/Edge.cpp: In member function ‘virtual void Edge::Print(std::ostream&) const’:
Models/Edge.cpp:32: error: base operand of ‘->’ has non-pointer type ‘const Node’
[где 32 — строка в примере выше, которая начинается с << "Connects nodes: "]

Что здесь происходит? Насколько я могу судить, m_start — это указатель! Может ли быть что-то не так в назначении где-то? GetIndex() Функция, вызываемая в примере, выглядит следующим образом, и та же ошибка возникает с или без const:

int GetIndex() const { return m_index; }  //in Node.h

1

Решение

Ты выстрелил себе в обе ноги. Так должно быть:

Node* m_start, * m_end;

В следующий раз просто оплатите дополнительную строку экрана и напишите:

Node * m_start;
Node * m_end;

Вы будете делать всем одолжение.

7

Другие решения

Node* m_start, m_end;

Это заявляет m_start как Node*, но это заявляет m_end как Node, Код для создания обоих указателей будет выглядеть так:

Node* m_start, *m_end;
3

По вопросам рекламы [email protected]