C ++类成员

时间:2010-12-16 10:47:20

标签: c++ class members

我来自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中我能够做到这一点没有问题。 这有解决方案吗? 感谢...

7 个答案:

答案 0 :(得分:2)

你应该使用forward declarations。请将此作为您的第一个陈述:

class Table;  // Here is the forward declaration

答案 1 :(得分:2)

在课程框之前添加:

class Table;

因此,您forward declare类表,以便可以在Box中使用指向它的指针。

答案 2 :(得分:2)

这里有一个循环依赖,需要转发声明其中一个类:

// forward declaration
class Box;

class Table
{
    Box* boxOnit;
}  // eo class Table

class Box
{
    Table* onTable
} // eo class Box

请注意,一般来说,我们在BoxTable都有一个单独的头文件,在两者中使用前向声明,例如:

<强> 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;
};