接口无法识别

时间:2012-03-09 16:29:13

标签: c++ compiler-errors

我在自己的标头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'类型重新定义
错误C2226:语法错误:意外类型'< unnamed-tag>'

我的代码出了什么问题?

编辑: 标题包括警卫。 我使用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

请注意,“Stream”是另一个类,使用时没有任何问题。

1 个答案:

答案 0 :(得分:2)

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