C ++, связывающий 2 класса вместе, как - PullRequest
2 голосов
/ 31 марта 2011

это может быть немного тривиально, но я озадачен такой проблемой.

Я хочу создать два класса Class1, Class2.Оба класса должны содержать поле, содержащее указатель на экземпляр другого класса.Таким образом, они должны быть сшиты.

Если я сделаю это так, я получу ошибку от компилятора, говорящую: - ISO C ++ запрещает объявление 'Class1' без ожидаемого типа ';'до * токен

Пожалуйста, помогите:)

file: class1.h

#ifndef CLASS1_H
#define CLASS1_H

#include "class2.h"

class Class1 {
public:
    Class1();
private:
    Class2* link;
}

#endif

file: class2.h

#ifndef CLASS2_H
#define CLASS2_H

#include "class1.h"

class Class2 {
public:
    Class2();
private:
    Class1* link;
}

#endif

Ответы [ 2 ]

3 голосов
/ 31 марта 2011

Добавьте объявление класса (в отличие от определения), прежде чем использовать его.Например, вы можете иметь:

#ifndef CLASS1_H
#define CLASS1_H

class Class2;

class Class1
{
public:
    Class1();
private:
    Class2* link;
}

#endif

и сделать то же самое для Class2.h.

2 голосов
/ 31 марта 2011

Проблема в круговой зависимости;каждый заголовок пытается включить другой, что невозможно.

Вам не нужно полное определение каждого класса для объявления указателя на него;Вы можете заменить каждую строку #include на предварительное объявление (class Class1; и class Class2;), а затем все должно скомпилироваться счастливо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...