2015-01-08 4 views
-2

나는 왜 코드가 작동하지 않는지 알 수 없다. 나는 주에 내가 표기법을 사용하여 다음 싶습니다 struct 및 운영자 operator T***() 과부하를 넣어 내부에 생성 const int * const * const * p1 = a;연산자 오버로드 T ***()

struct A{ 
    template<class T> operator T***(){} 
}; 

int main(){ 
    A a; 
    const int * const * const * p1 = a; 
    return 0; 
} 

Error: undefined reference to '_ZN1AcvPPPT_IKiEEv'

+6

나는 왜 당신이 그 일을 기대했는지 전혀 모른다. – sjdowling

+0

@sjdowling : 이유를 말해주십시오. –

+2

내가 본 모든 이상한 코드 중에서, 이것은 내가 가장 많이 WTF로 가게했다. Congrats :) 진지하게, 그러나, 당신은 여기서 무엇을 이루려고합니까? – jrok

답변

3

당신은 단순히 참조하여 형식 변환 기능을 구현

struct A{ 
    template<class T> operator T***() { 
     return nullptr; // Do whatever you want to do here. 
    } 
}; 

working sample하시기 바랍니다 제공하기 위해 놓친를 정의해야합니다.

template<class T> operator T***(); 

운영자 템플릿을 선언하지만, 그것은 정의되지 않은하다는 따라서 오류를 정의하지 않습니다 : 당신이 질문을 편집하기 전에

+0

const의 연쇄 체인 : – Ankur

+0

@Shan 링크 된 샘플에서 볼 수 있듯이,'const'는 여기서는 아무런 역할을하지 않습니다. –

2

나는 당신이하려고하지만 문제는 링커 무엇인지 전혀 생각이 없다 문제. 변환 연산자 T***을 선언 (정의하지 않음)하면됩니다. 당신은

template<class T> operator T***() 
{ 
    // define it here 
} 
0

. 템플릿은 다른 소스 파일을 사용하는 모든 번역 단위에서 정의해야하므로 다른 소스 파일에서 템플릿을 정의하더라도이 오류가 발생합니다. 편집 후

는 :
template<class T> operator T***(){} 

코드는 컴파일

하지만, 연산자는 return 문 누락되어 있기 때문에 동작을 정의되지 않은있다.