2012-06-21 1 views
2

다음 코드는 MSVStudio 2010 Express에서 컴파일되지 않고 부스트 컨테이너 선언이 포함 된 유형의 (정적?) 인스턴스를 생성하기 때문인 것으로 보입니다. boost::ptr_list<TypeContained>에서 std::list<TypeContained *>으로 변경하면 성공적으로 컴파일되지만 부스트 컨테이너가 마음에 듭니다. 누구든지 내가이 문제를 어떻게 해결할 수 있을지 생각해? 오류가 너무 error C2504: 'Proxy<TypeContainer,TypeContained>' : base class undefined부스트 컨테이너가 정의되지 않은 (선언 된) 클래스로 컴파일되지 않음

#include <string> 
#include <boost/ptr_container/ptr_list.hpp> 

template <typename TypeContainer, typename TypeContained> 
class Proxy 
{ 
private: 
    typename boost::ptr_list<TypeContained>::iterator m_clsPosition; 

public: 
    class Container {}; 
}; 

template <typename V> class Container; 

template <typename V> 
class Dependent : public Proxy<Container<V>, Dependent<V> >, 
        public V {}; 

template <typename V> 
class Container : public Proxy<Container<V>, Dependent<V> >::Container {}; 

int main(int argc, char * argv[]) 
{ 
    Container<std::string> clsContainer; 
    return 0; 
} 
+0

컴파일러 옵션은 무엇입니까? – gda2004

답변

0

이며, 그 소리와 함께 컴파일, 문제는 TypeContainer에 sizeof 연산자를 사용하려고 향상에있다, 그러나 당신이 아직도 있기 때문에이 시점에서, 아직, TypeContainer의 크기가 무엇인지 결정되지 것 그것을 정의합니다. 그래서

, 근본 문제, 간단한 사례로 : 즉

template <typename A> 
class T { 
    static const int a = sizeof(T<A>); 
}; 

int main() { 
    T<int> d; 
} 

, sizeof 연산자를 호출하지만, (알려진 크기가) 포인터를 사용하여 만든 루프 의존성이있어,이 종속성은 결코 창조되지 않았다.

관련 문제