Я работаю над проектом на C++, который имеет дело с графиками. Он имеет множество функций, связанных с классом «Node» и классом «Edge».Базовый операнд имеет не указательный тип ... но это указатель?
Во-первых, Edge хранит копии своего стартового узла и его конечного узла; что-то вроде:
class Edge{
...
private:
Node m_start, m_end;
...
}
Для того, чтобы некоторые функции графика модификации более эффективными, я решил сделать класс пограничного магазин указатели на начало и конечные узлы вместо:
class Edge{
...
private:
Node* m_start, m_end;
...
}
I, таким образом, внес коррективы в 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