2012-03-09 81 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:'struct':缺少标记名
错误C2011:'< unnamed-tag>':'enum 'type redefinition
error C2226:syntax error:unexpected type'< unnamed-tag>'

我的代码出了什么问题?编辑: 标题包括警卫。 我使用Eclipse CDT和Microsoft编译器。

整个头:

​​

和类是用于:

#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

您在导入时缺少双引号,但这可能是拼写错误。 – 2012-03-09 16:30:43

+1

难道你忘了在'#include“MyInterface.h'后关闭报价吗? – 2012-03-09 16:31:36

+0

对不起,这里是一个输入错误。TY David纠正了这个错误。在代码中,报价已被正确关闭。 – 2012-03-09 16:33:31

回答

2

事情是,在“ObjBase.h”中,字符串“接口”是typedef。所以我不能使用“接口”作为标识符。如果我使用另一个字符串作为标识符,它可以正常工作