Вопрос о включении структуры typedef (или, по крайней мере, я думаю, что это так). Это, наверное, глупо, но я не мог понять, что не так с моим кодом.C++ - включение структуры typedef изнутри класса
У меня есть Node.h
заголовок, объявляющий класс Node
:
class Node {
public:
Node(/*some parameters*/); // Class constructor
typedef struct{ // This represents a weighted edge of weight "weight" from the current node to another node "node"
Node* node;
double weight;
}EdgeInfo;
vector<EdgeInfo*> OutEdges; // This vector represents the outgoing weighted edges from this node
};
Так я понял, что это единственное место в моем коде я могу объявить struct
, потому что это единственное место, где я могу объявить EdgeInfo
, что " знает ", что такое объект класса Node
.
Тогда у меня есть заголовок Graph.h
, в том числе файл Node.h
, который объявляет класс Graph
.
Теперь в файле Graph.cpp
я реализовать функцию, которая закругляется на всех исходящих ребер Node
, более или менее, как это:
Node* current = /*passing an object of class Node*/
for(EdgeInfo* out : current->OutEdges){
/*working on the edges*/
}
Проблема заключается в том, что при компиляции я получаю ошибку error: ‘EdgeInfo’ was not declared in this scope
в цикле for
.
Как вы, наверное, видите, я как бы новичок C++. Я думал, что включив Node.h
, я мог бы использовать определения'typedef struct` внутри класса так же, как я использую переменные и функции. Я ошибаюсь? Или я не понял, как включает работу на C++?
Надеюсь, я не пропустил никаких подробностей. Большое вам спасибо за помощь!
'Узел :: EdgeInfo'. Но почему вы используете 'typedef' в этом пункте? Они не нужны в C++ (обычно в этом контексте). – Zeta
@Zeta Почему? Что бы вы сделали вместо этого? – jackscorrow
@Tommaso Scarpa В C++ вам не нужно использовать ключевое слово 'typedef' для объявления' struct' или 'class'. Это действительно, но не обязательно. Вы можете просто объявить свою 'struct', выполнив:' struct S {int a; }; 'И вы объявляете экземпляр' struct S', делая: 'S s; sa = 10' – nikau6