Вопрос

Я приехал из 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;
};
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top