먼저 좀 더 긴 샘플 코드와 질문에 사과드립니다 ... A, B, C의 세 클래스가 있습니다 (A와 B는 추상입니다).C++, 복사 생성자 구현, 기본 템플릿 매개 변수
클래스 A는 다른 유형의 Item을 저장하는 컨테이너를 나타냅니다.
파생 클래스 B에는 Item *에 대한 전문화가 포함되어 일부 기능이 추가되었으며 기본 매개 변수는 TD입니다.
typedef enum { D1, D2} TD;
template < typename T, const TD td = D1 >
class B;
template <typename Item, const TD td>
class B <Item *, td> : public A <Item *>
{
public:
B() : A <Item *>() {}
template <const TD td2>
B (const B <Item *, td2> & source)
{
if (this != &source) { //Code } //Error
}
virtual ~B() = 0 {}
};
클래스 C는 추상 클래스가 아니며 추가 된 다른 기능 (코드에는 포함되지 않음)을 포함합니다.
template < typename T, const TD td = D1 >
class C;
template <typename Item, const TD td>
class C <Item *, td> : public B <Item *, td>
{
public:
C() : B <Item *, td>() {}
template <const TD td2>
C (const C <Item*, td2 > &source) : B <Item*, td> (source) {}
};
클래스 C의 두 개체를 만들려고하는 경우 기본 매개 변수가 형식 인 경우 모든 내용이 정상입니다.
Error 1 error C2446: '!=' : no conversion from 'const B<T,td> *' to 'B<T,td> *const
내 질문 :
int main()
{
C <Test <double> *, D1 > t1;
C <Test <double> *, D1 > t2(t1);
}
그러나 두 매개 변수는 서로 다른 유형의 경우
int main()
{
C <Test <double> *, D1 > t1;
C <Test <double> *, D2 > t2(t1);
}
컴파일러가 선 다음 오류와
if (this != &source) { //Code } //Error
에 정지
코드 :1) 어디에서 (어떤 클래스에서) TD의 다른 지름에 대해 복사 생성자를 구현하는 방법.
2) 어디에서 (어떤 클래스에서) TD의 다른 지름에 대해 연산자 =를 구현하는 방법.
3) 소멸자를 구현하는 곳 (클래스)
도움 주셔서 대단히 감사합니다.
@ KennyTM :이 두 객체가 다른 유형이라는 사실을 잊었습니다. 당신의 도움을 주셔서 감사합니다. – justik