VS2008 C ++“interface”作为参数名称无法编译

时间:2012-05-20 16:16:43

标签: c++ visual-c++

正如标题所说,我在VS2008 C ++程序中遇到编译器错误。我不确定如何更好地描述我的问题而不是代码。除非我取消注释TEST行,否则以下编译。

#include <windows.h>
#include <iostream>
using namespace std;

//#define TEST //<-- uncomment for error
#ifdef TEST
void test(void* interface)
{
    return;
}
#endif
int main()
{
    cout << "Hello World" << endl;
    system("PAUSE");
    return(0);
}

取消注释后,我收到以下错误:

1>main.cpp(7) : error C2332: 'struct' : missing tag name
1>main.cpp(7) : error C2144: syntax error : '<unnamed-tag>' should be preceded by ')'
1>main.cpp(7) : error C2144: syntax error : '<unnamed-tag>' should be preceded by ';'
1>main.cpp(7) : error C2059: syntax error : ')'
1>main.cpp(8) : warning C4094: untagged 'struct' declared no symbols
1>main.cpp(8) : error C2143: syntax error : missing ';' before '{'
1>main.cpp(8) : error C2447: '{' : missing function header (old-style formal list?)

这是非托管代码,所以我不确定word接口的问题是什么。有没有办法让这个代码按原样编译,或者我是否必须将术语接口的每个实例更改为其他东西?

谢谢!

2 个答案:

答案 0 :(得分:3)

如果您的代码需要包含Windows.h,那么您应该避免使用名称interface,因为它保留用于Windows SDK为其保留的用途(实际上它是关键字{{的同义词) 1}})。可能存在解决该问题的方法(在包含SDK标头后你可以struct),但你应该避免使用该标识符。

答案 1 :(得分:2)

单词interface由MSVC ++保留,因为它是Microsoft Compiler添加的非标准keyword,用于在MSVC ++中定义 interface

因此为参数使用不同的名称,如下所示:

#ifdef TEST
void test(void* test_interface)
{
    return;
}
#endif