2012-03-09 6 views
4

Я интерфейс заявил в своем заголовке MyInterface.h:интерфейс не распознается

class MyInterface{ 
public: 
    virtual ~MyInterface(){} 
    virtual void initialize() = 0; 
    virtual void newValueSound(int stream, double value) = 0; 
    virtual void newValueAlg1(int stream, double value) = 0; 
    virtual void newValueAlg2(int stream, double value) = 0; 
}; 

Всякий раз, когда я включаю этот заголовок и попытаться использовать интерфейс, например:

#include "MyInterface.h" 

void someMethod(){ 
    MyInterface *interface; 
} 

Я получаю странные ошибки компиляции на линии:

ошибка C2332: 'структура': отсутствует имя тега
ошибка C2011: '< безымянного-тега>': «перечисление 'redefinition
ошибка C2226: синтаксическая ошибка: неожиданный тип' < unnamed-tag> '

Что не так с моим кодом?

EDIT: В заголовок включены ограждения. Я использую Eclipse CDT с компилятором Microsoft.

Весь заголовок:

#ifndef MYINTERFACE_H_ 
#define MYINTERFACE_H_ 

class MyInterface{ 
public: 
    virtual ~MyInterface(){} 
    virtual void initialize() = 0; 
    virtual void newValueSound(int stream, double value) = 0; 
    virtual void newValueAlg1(int stream, double value) = 0; 
    virtual void newValueAlg2(int stream, double value) = 0; 
}; 

#endif 

и класс используется в:

#ifndef MAIN_H_ 
#define MAIN_H_ 

#include <asio.h> 
#include "Stream.h" 
#include "MyInterface.h" 

class MicApp { 
private: 
    long inputChannelCount; 
    Stream **streams; 
    MyInterface *interface; 
public: 
    MicApp(MyInterface *interface); 
    void initializeASIODrivers(); 
    char **getDriverNames(int *numberOfDrivers); 
    bool loadDriver(char *driverName); 
    ASIOError initDriver(ASIODriverInfo *asioDriverInfo); 
    long getChannelCount(); 
    double getSampleRate(); 
    void activateStream(bool activate, int stream); 
    ASIOError startASIO(); 
    ASIOError stopASIO(); 
    ASIOError exitDriver(); 
}; 

#endif 

Обратите внимание, что «поток» еще один класс, и используется без каких-либо проблем.

+1

Вам не хватает двойной кавычки внутри вашего импорта, это может быть опечатка. –

+1

Разве вы не забыли закрыть цитату после '#include? MyInterface.h'? –

+0

Извините, это была опечатка. TY David для исправления этого. В коде кавычки должным образом закрыты. –

ответ

2

Дело в том, что строка «интерфейс» typedef'ed в ObjBase.h. Поэтому я не могу использовать «интерфейс» в качестве идентификатора. Если я использую другую строку как идентификатор, она работает нормально

Смежные вопросы