У меня есть несколько вложенных классов, которые я хочу объявить вне основного класса в отдельном файле заголовка, потому что вложенные классы очень длинные.Объявить несколько вложенных классов за пределами основного класса
Это то, что я хочу сделать:
class MainClass {
private:
classA;
classB;
classC;
//and so on
public:
method(C.var) {//code}
Проблема заключается в том, что я получаю Error:incomplete type not allowed.
потому что классы не были «определены». Есть ли что-нибудь, что я могу сделать, добавив весь код в MainClass
?
Реальный код:
class Graph //fix subclass issues
{
private:
template <class TYPE> class * linkedList;
template <class TYPE> class * chainingTable;
class * minHeap;
class * vertex;
class * edge;
chainingTable<vertex*> vertexList;
vertex * findVertex(int addrs) { return vertexList.findVertex(addrs); }
int weight(vertex *v, vertex *u) { return v->weight + u->weight; }
void relax(vertex * v, vertex * u,int i, minHeap h)
{
if(v->weight > u->weight+weight(v,u))
{
v->weight = v->weight + weight(v,u);
h.decreaseKey(i, v->weight); //fixes heap
v->predecessor = u;
}
}
public:
void addVertex(int cost, int address)
{ vertexList.insert(new vertex(cost, address)); } //and the class continues
Теперь с этими изменениями я получаю Error: expected either a definition or tag name
EDIT: Добавлен реальный код, который запросили, и добавил ОБНОВЛЕНО ошибка позиционирования
использовать указатели или ссылки? И не ставьте код, используя эти неопределенные классы внутри файла заголовка. –
Я думал, что использование ссылок будет означать, что каждый должен определить их все в конструкторе. –
Включите ли вы заголовок своих дополнительных классов? – Jarod42