C++/CLI 컴파일 오류 - error C2872: 'IServiceProvider' : ambiguous symbol could be ...
ATL 컬렉션을 사용하는 C++/CLI 코드를 빌드할 때, 다음과 같은 오류가 발생한다면?
1>------ Build started: Project: ClassLib, Configuration: Release x64 ------
1> TestHash.cpp
1>c:\...[생략]...\servprov.h(96): error C2872: 'IServiceProvider' : ambiguous symbol
1> could be 'c:\...[생략]...\servprov.h(53) : System::IServiceProvider IServiceProvider'
1> or 'c:\...[생략]...\.netframework\v4.0\mscorlib.dll : System::IServiceProvider'
1>c:\...[생략]...\servprov.h(96): error C3699: '*' : cannot use this indirection on type 'IServiceProvider'
1> compiler replacing '*' with '^' to continue parsing
1>c:\...[생략]...\servprov.h(103): error C2371: 'IServiceProvider' : redefinition; different basic types
1> c:\...[생략]...\servprov.h(53) : see declaration of 'IServiceProvider'
1>c:\...[생략]...\servprov.h(120): error C2872: 'IServiceProvider' : ambiguous symbol
1> could be 'c:\...[생략]...\servprov.h(103) : IServiceProvider'
1> or 'c:\...[생략]...\.netframework\v4.0\mscorlib.dll : System::IServiceProvider'
1>c:\...[생략]...\servprov.h(241): error C2872: 'IServiceProvider' : ambiguous symbol
1> could be 'c:\...[생략]...\servprov.h(103) : IServiceProvider'
1> or 'c:\...[생략]...\.netframework\v4.0\mscorlib.dll : System::IServiceProvider'
1>c:\...[생략]...\servprov.h(251): error C2872: 'IServiceProvider' : ambiguous symbol
1> could be 'c:\...[생략]...\servprov.h(103) : IServiceProvider'
1> or 'c:\...[생략]...\.netframework\v4.0\mscorlib.dll : System::IServiceProvider'
1>C:\...[생략]...\urlmon.h(6459): error C2872: 'IServiceProvider' : ambiguous symbol
1> could be 'c:\...[생략]...\servprov.h(103) : IServiceProvider'
1> or 'c:\...[생략]...\.netframework\v4.0\mscorlib.dll : System::IServiceProvider'
1>C:\...[생략]...\urlmon.h(6461): error C2872: 'IServiceProvider' : ambiguous symbol
1> could be 'c:\...[생략]...\servprov.h(103) : IServiceProvider'
1> or 'c:\...[생략]...\.netframework\v4.0\mscorlib.dll : System::IServiceProvider'
1>C:\...[생략]...\ocidl.h(6261): error C2872: 'IServiceProvider' : ambiguous symbol
1> could be 'c:\...[생략]...\servprov.h(103) : IServiceProvider'
1> or 'c:\...[생략]...\.netframework\v4.0\mscorlib.dll : System::IServiceProvider'
2>------ Build started: Project: ConsoleApplication1, Configuration: Release x64 ------
2> ConsoleApplication1 -> D:\...[생략]...\ConsoleApplication1.exe
========== Build: 1 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
아마도, 소스 코드에서 "using namespace"와 ATL 컬렉션을 include 하는 구문이 다음과 같은 순서일 것입니다.
using namespace System;
using namespace System::Collections;
#include <atlcoll.h>
using namespace ATL;
아래와 같이 바꿔주시면 ^^ 컴파일 오류가 발생하지 않습니다.
#include <atlcoll.h>
using namespace ATL;
using namespace System;
using namespace System::Collections;
[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]