2009-08-24 2 views
0

의 ctor/비의 ctor 기능에서 템플릿 인수 ... 난 작은 템플릿 헬퍼 클래스를 정의하고 싶었다 (C2027). 제 질문은 유형의 크기를 얻을 수 있습니까? 필자가 필요로하는 이유는 객체가 생성되는 유형이 다르게 정의 된 구조가 될 수 있기 때문에 런타임에 사용 된 구조체의 크기를 알아야하기 때문입니다.는 sizeof() 그리고 오늘 난관에 충돌

내가 완고하기 때문에 나는 수 있습니다.는 ctor에서 sizeof (T)를 사용하지만 ctor가 아닌 함수에서는 사용하지 않습니다. - 이제 제 질문은 ... 왜?!

+3

이 코드를 실제로 컴파일 해 보셨습니까? 'template < class T >'와'CMyClass' 사이에'class' 또는'struct'가 없습니다. 'class'를 추가하면 gcc가 정상적으로 컴파일됩니다. – Tobias

+0

또한 "std :: size_t"를 시도하십시오. 생성자의 코드가 제대로 작동하는 것처럼 보일 수 있지만 'CMyClass '개체를 생성 할 때 생성자가 인스턴스화 될 때까지 컴파일되지 않습니다. –

답변

1

질문에 적절한 대답이 무엇인지 확실하지,하지만()를 반환하는 대신 다시는 sizeof를 호출하면 GetElementSize 그냥 ISIZE 멤버함으로써이를 해결하려면 할 수 있습니다 보인다.

+0

작은 코드로 관련 코드를 추출해도 더 이상 실패하지 않는다는 사실을 발견했지만 결국이 사실을 발견했습니다. – JTeagle

2

는 C2027의 메시지가 무엇 여기 잘 작동하는 것 같다? 그리고 어떤 컴파일러를 사용하고 있습니까?

+0

VS2005 패치를 사용하고 있습니다. VC8 또는 VC8.1이라고 생각합니까? 전체 오류 텍스트는 다음과 같습니다 가에서 MyClass.h (170) : 오류 C2027 : CmyClass에서 :: GetElementSize (무효 size_t가 '클래스 템플릿 멤버 함수를 컴파일하는 동안 정의되지 않은 유형의 사용을'T ' 가'T ' 의 선언을 참조) CONST "로 [ T = T ] 클래스 템플릿 인스턴스화 CmyClass에서 참조 볼 '로 컴파일되는 [ T = T ] 그리고 인스턴스화되고 있었다 \t CMyClass ElementStore; 여기서 SOME_STRUCT_DEF에는 3 개의 부동 요소와 DWORD + 자체 ctor가 들어 있습니다. – JTeagle

+0

Yikes, 거기서 서식을 잃어 버려서 미안해. – JTeagle

+0

사실, 나는 그 질문을 철회해야합니다. 모든 경우에 발생하는 것 같지 않습니다. 특히 맨손의 뼈를 추출하여 컴파일 가능한 테스트 샘플을 만들려고 할 때는 그렇지 않습니다. Grrr! – JTeagle

2

다른 이유가있을 수 있습니다. 이 코드를 고려하십시오 (이하 "cpp를"파일) 생성자가 인스턴스화시

// file foo.h 
class X; 

template<class T> 
class CMyClass 
{ 
public : 
    CMyClass() { size_t iSize = sizeof(T); } // Allowed. 
    size_t GetElementSize() const { return sizeof(T); } // C2027. 
}; 

struct Class { 
    Class(); // definition of it in the cpp file, where "X" is fully defined 
    void callit() { cm.GetElementSize(); } // instantiated here! 
    CMyClass<X> cm; 
}; 

T는 완전히 정의 된 유형입니다. 그러나 GetElementSize이 인스턴스화되면 (".h"파일에서) X은 아직 완전히 정의되지 않았습니다.

+0

@litb : VC에서 "C2027"힌트를 표시하는 동안 오류가 2 단계 조회를 필요로한다고 생각합니다. 불행히도이를 구현하지 않습니다. – sbi

+0

저는 VC에 대해 잘 모르겠습니다. 그 컴파일러는 나에게 그것에 대해 아무 것도 생각하기에는 너무 무너지고있다. :) –

+0

@sbi : 여기에 2 단계 조회가 없다.2 단계 조회는 종속 인수가 포함 된 함수 호출에 대해 인수 유형 범위에서 수행되는 조회를 설명하는 데 사용되는 용어입니다. –