我有一个在自己的头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”是另一个类,它使用没有任何问题.
最佳答案 事情是字符串“interface”在ObjBase.h中是typedef.所以我不能使用“interface”作为标识符.如果我使用另一个字符串作为标识符,它可以正常工作