2013-07-30 1 views
0

Я должен иметь структуру «configset» в классе-заголовка, что-то вроде этого:Реализация структуры из другого файла заголовка

class A { 
public: 
    static configset *getnext(); 
} 

Конечно, компилятор жалуется, что configset не является типом, но реализован в другом заголовочном файле вместе с некоторыми функциями. Из-за этого я не могу просто включить этот заголовочный файл, компилятор будет генерировать ошибки, которые эти функции определяются несколько раз. Но как я могу получить конфигурацию в своем классе-заголовке? Простое копирование также не будет работать, поскольку компилятор выдает ошибку, что структура была определена дважды.

+0

включая файл несколько раз должно быть хорошо. Если компилятор говорит, что функции определены несколько раз, это означает, что ваш заголовок плохо разработан. (A) переместите функцию _defintitions_ (не декларации) в файл cpp или (B) отметьте функции как 'inline'. –

ответ

1

Вперед объявите configset или объявите свои функции, которые определены в файле заголовка, как inline.

+0

Форвардная декларация была в порядке. Благодарю. – user2610529

1

Используйте опережающее объявление так:

// Forward declare configset. Tells compiler that the class/struct is defined in 
// another translation unit 
struct configset; 

class A { 
public: 
    static configset *getnext(); 
}; 

Обратите внимание, что это работает только до тех пор, пока вы используете только указатели на configset.

1

Переместить реализацию методов configset в отдельный файл .cpp (not header).