我来自Java到C ++ ......
当我尝试这样做时......
class Box {
Table* onTable;
};
class Table {
Box* boxOnIt;
};
int main() {
Table table;
Box box;
table.boxOnIt = &box;
box.onTable = &table;
return 0;
}
编译器告诉我Table未定义。 如果我切换类定义,编译器会告诉我Box未定义
在java中我能够做到这一点没有问题。 这有解决方案吗? 感谢...
答案 0 :(得分:2)
你应该使用forward declarations。请将此作为您的第一个陈述:
class Table; // Here is the forward declaration
答案 1 :(得分:2)
答案 2 :(得分:2)
这里有一个循环依赖,需要转发声明其中一个类:
// forward declaration
class Box;
class Table
{
Box* boxOnit;
} // eo class Table
class Box
{
Table* onTable
} // eo class Box
请注意,一般来说,我们在Box
和Table
都有一个单独的头文件,在两者中使用前向声明,例如:
<强> box.h 强>
class Table;
class Box
{
Table* table;
}; // eo class Box
<强> table.h 强>
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"
答案 3 :(得分:1)
class Table;
class Box {
Table* onTable;
};
class Table {
Box* boxOnIt;
};
int main() {
Table table;
Box box;
table.boxOnIt = &box;
box.onTable = &table;
return 0;
}
答案 4 :(得分:1)
你应该转发声明两个类中的一个:
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;
}
答案 5 :(得分:1)
使用前向声明,以便首先声明的类知道第二个。 http://www.eventhelix.com/realtimemantra/headerfileincludepatterns.htm
答案 6 :(得分:0)
在顶部添加班级定义
class Table;
class Box {
Table* onTable;
};
class Table {
Box* boxOnIt;
};