1

タイトルにあるように、VS2008C++プログラムでコンパイラエラーが発生します。コードよりも自分の問題をどのように説明するのがよいかわかりません。以下は、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?)

これはアンマネージコードであるため、インターフェイスという単語の問題が何であるかはわかりません。このコードをそのままコンパイルする方法はありますか、それともインターフェイスという用語のすべてのインスタンスを別のものに変更する必要がありますか?

ありがとう!

4

2 に答える 2

3

コードに含める必要がある場合は、Windows SDKで予約されてWindows.hいる名前を使用しないでください(基本的には、キーワードの同義語です)。その問題を回避するためのハックがおそらくありますが(SDKヘッダーを含めた後で可能です)、おそらくその識別子の使用を避ける必要があります。interfacestruct#undef interface

于 2012-05-20T16:37:03.947 に答える
2

この単語は、MSVC ++でインターフェイスを定義するために使用される、Microsoftコンパイラによって追加されinterfaceた非標準であるため、MSVC++によって予約されています。keyword

したがって、パラメータには次のような別の名前を使用します。

#ifdef TEST
void test(void* test_interface)
{
    return;
}
#endif
于 2012-05-20T16:21:09.267 に答える