2011-03-28 1 views
2

클래스 "Foo"가 정의 된 헤더 파일 (원시, 타사)을 포함하는 C++/CLI 파일을 컴파일하려고합니다. 또한 나는 C# dll을 #using "Bar.dll"을 통해 사용하고 있는데 여기서 네임 스페이스 "Foo"가 정의되어있다. 컴파일러에서 오류 C2872 "Foo is ambiguous symbol"을 표시합니다.C++/CLI - 네임 스페이스 및 클래스의 모호한 기호

네임 스페이스 네이티브 클래스 "Foo"는 헤더 파일의 클래스 정의가 특정 네임 스페이스에 중첩되어 있지 않음을 알지 못합니다. 그래서 나는 "Foo"클래스가 네임 스페이스에 없을 수도 있다고 가정합니다 (C++에서 가능합니다, 그렇지 않습니까?). 그렇지 않으면 네임 스페이스로 클래스 "Foo"를 지정하여 컴파일러에 맞게 지정합니다.

"Bar.dll"에 사용 된 "Foo"네임 스페이스의 이름을 바꿀 수 있지만 네임 스페이스를 유지할 다른 솔루션을 찾고 있습니다. 실제로 클래스와 네임 스페이스는 다른 요소입니다. 그러나 C++/cli 컴파일러에서는 그렇지 않습니다. 사전에

들으 Michbeck

답변

1

잘 될지 모르겠지만 시도해 볼 가치가 있습니다.

namespace FooNamespace = Foo; 
typedef Foo FooClass; 

namespace 지시문은 클래스가 아닌 네임 스페이스에서만 유효합니다. 그 반대는 typedef. 코드에 FooClassFooNamespace을 사용할 수 있어야합니다.

+0

예, thx - typedef가 작동합니다! 인사 – Michbeckable

1

나는 변경이 너무 비싼 것 거대한 독점 코드베이스와 비슷한 문제로 실행했습니다. 문제는 나는 다음과 같은 시도 할 때 나를 위해 팝업 보인다

using namespace System; 
내가 포함하고있어 코드는 자신의 열거 클래스가, 당신은 다음 두 개의 이름을 "시스템"네임 스페이스를 사용하기 시작하는 경우에 발생

충돌. 이 문제를 해결하기 위해 간단히 네임 스페이스 {}의 안쪽에 넣습니다.

namespace MyNamespace 
{ 
    using namespace System; 

    ... 
} 

#using 지시문에는 사용할 수 없지만 시도해 볼 가치가있을 수 있습니다.

#using "Bar.dll" 

namespace MyNamespace 
{ 

    using namespace System; 
    using namespace Foo; 

    ... 
} 
1

클래스 "Foo"(Courtesy David Yaw)의 typedef 외에도 "Foo":: Foo 클래스의 전역 네임 스페이스를 사용하여 문제를 해결할 수 있습니다. 그래서 컴파일러는이 클래스와 "Bar.dll"의 "Foo"네임 스페이스를 구별 할 수 있습니다.