我在自己的头文件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‘类型重定义
错误C2226:语法错误:意外类型'‘
我的代码出了什么问题?
编辑:标题包含防护。我使用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“是另一个类,它的使用没有任何问题。
发布于 2012-03-14 22:12:01
问题是字符串"interface“在ObjBase.h中是类型定义的。所以我不能使用"interface“作为标识符。如果我使用另一个字符串作为标识符,它可以正常工作。
https://stackoverflow.com/questions/9637566
复制相似问题