2010-02-22 4 views
1

내 클래스 정의를 모두 네임 스페이스에 래핑 할 때까지 내 코드가 정상적으로 작동했습니다.C++ 네임 스페이스를 사용하도록 프로그램을 변환하려면 어떻게해야합니까?

오류 C2039 : 'PhysicsObject'나는 Visual Studio에서 컴파일 할 때

// "Player.h" 
#include "PhysicsObject.h" 
namespace MaelstromII 
{ 
    class Player : public MaelstromII::PhysicsObject 
    { 
     // ... 
    }; 
} 

// "PhysicsObject.h" 
#include "GameObject.h" 
namespace MaelstromII 
{ 
    class PhysicsObject : public MaelstromII::GameObject 
    { 
     // ... 
    }; 
} 

// "GameObject.h" 
namespace MaelstromII 
{ 
    class GameObject 
    { 
     // ... 
    }; 
} 

, 나는 이러한 오류의 무리를 얻을 'MaelstromII'

의 구성원이 아닌 것은 GameObject에 대해서도 불평합니다.

이유가 누구인지 아시겠습니까?

+5

이미 동일한 네임 스페이스 안에 있다면 public MaelstromII :: PhysicsObject 대신'public PhysicsObject' 만 할 수 있습니다. – GManNickG

답변

0

내 코드의 순환 종속성 때문에 문제가 발생했습니다. 그 문제를 해결 한 후, 내 코드는 잘 컴파일됩니다.

namespace Foo { 
    class Bar {} 
    class Bar2 : public Bar {} 
} 

그리고이 : 컴파일러는 그들에게 같은 방법으로 해결

namespace Foo { 
    class Bar {} 
    class Bar2 : public Foo::Bar {} 
} 

분명이 차이가 없다.

2

나는 100 % 아니에요,하지만 난 당신이

namespace Foo 
{ 
    class Bar : public Foo::BarBase {} 
} 

이 같은 말할 때 무슨 생각 : 네임 스페이스에있을 때

class Foo::Bar : public Foo::Foo::BarBase {} 

것은, 당신이 돈 ' namespace :: specifier를 사용하여 해당 네임 스페이스의 다른 항목에 액세스해야합니다.

+0

참이지만,'Foo :: BarBase'를 찾는 네임 스페이스 계층 구조를 계속 올라가고 최상위 네마 스페이스와 관련하여 찾을 수 있기 때문에 오류가 발생하지는 않습니다. – Troubadour

+0

아하? 매일 새로운 것을 배우십시오. 감사! – Narfanator

관련 문제