Вопрос
Я приехал из Java в C ++ ...
Когда я пытаюсь сделать это ...
class Box {
Table* onTable;
};
class Table {
Box* boxOnIt;
};
int main() {
Table table;
Box box;
table.boxOnIt = &box;
box.onTable = &table;
return 0;
}
Компилятор говорит мне, что таблица не определен. Если я переключаю определения класса, компилятор скажите мне, что коробка не определена
В Java я смог сделать что -то подобное без проблем. Есть ли решение для работы? Благодарность...
Решение
У вас есть круговая зависимость здесь, и вам нужно пересылать, чтобы объявить один из классов:
// forward declaration
class Box;
class Table
{
Box* boxOnit;
} // eo class Table
class Box
{
Table* onTable
} // eo class Box
Обратите внимание, что, вообще говоря, у нас будет отдельный файл заголовка для Box
а также Table
, используя прямые объявления в обоих, например:
коробка
class Table;
class Box
{
Table* table;
}; // eo class Box
Таблица
class Box;
class Table
{
Box* box;
}; // eo class Table
Затем включите необходимый файл в наши файлы реализации (.cpp):
box.cpp
#include "box.h"
#include "table.h"
Table.cpp
#include "box.h"
#include "table.h"
Другие советы
Вы должны использовать Впередные объявления. Анкет Просто упомяните это как ваше первое утверждение:
class Table; // Here is the forward declaration
Добавьте это перед коробкой класса:
class Table;
Таким образом, вы Вперед объявит Таблица класса, чтобы указать на него можно использовать в коробке.
class Table;
class Box {
Table* onTable;
};
class Table {
Box* boxOnIt;
};
int main() {
Table table;
Box box;
table.boxOnIt = &box;
box.onTable = &table;
return 0;
}
Используйте заявления вперед, чтобы класс объявил, что сначала знал о втором.http://www.eventhelix.com/realtimemantra/headerfileincludepatterns.htm
Вы должны переслать объявить один из двух классов:
class Table; // forward declare Table so that Box can use it.
class Box {
Table* onTable;
};
class Table {
Box* boxOnIt;
};
int main() {
Table table;
Box box;
table.boxOnIt = &box;
box.onTable = &table;
return 0;
}
или наоборот:
class Box; // forward declare Box so that Table can use it.
class Table {
Box* boxOnIt;
};
class Box {
Table* onTable;
};
int main() {
Table table;
Box box;
table.boxOnIt = &box;
box.onTable = &table;
return 0;
}
Добавить определение класса в верхней части
class Table;
class Box {
Table* onTable;
};
class Table {
Box* boxOnIt;
};