>  기사  >  백엔드 개발  >  C++ 오류: 템플릿 인스턴스화 유형에서 파생된 것이 허용되지 않습니다. 어떻게 해결합니까?

C++ 오류: 템플릿 인스턴스화 유형에서 파생된 것이 허용되지 않습니다. 어떻게 해결합니까?

王林
王林원래의
2023-08-22 12:45:37740검색

C++ 오류: 템플릿 인스턴스화 유형에서 파생된 것이 허용되지 않습니다. 어떻게 해결합니까?

C++ 프로그래밍 언어에서 파생 클래스에 템플릿 인스턴스화 유형을 사용할 때 "템플릿 인스턴스화 유형에서 파생된 유형은 허용되지 않습니다"라는 컴파일러 오류가 발생할 수 있습니다. 이 오류가 발생하는 이유는 그 자체가 클래스가 아닌 템플릿 인스턴스화 유형에서 새 하위 클래스를 파생시키려고 하기 때문입니다. 이 기사에서는 오류의 원인을 설명하고 문제에 대한 해결책을 제공합니다.

1. 오류 원인

템플릿은 클래스나 함수를 만드는 데 사용할 수 있으며 다양한 데이터 유형에 따라 인스턴스화할 수 있습니다. 템플릿을 사용할 때 템플릿 매개변수를 지정해야 합니다. C++에서는 클래스 템플릿을 사용할 때 클래스 이름 뒤에 매개변수 목록이 와야 합니다. 예:

template<typename T>
class MyClass {
    //...
};

이 클래스 템플릿을 사용할 때 구체적인 유형을 제공해야 합니다.

MyClass<int> myObj;

이렇게 하면 MyClass 템플릿의 int 특수화가 생성됩니다.

그러나 파생 클래스에서 템플릿 인스턴스화 유형을 사용하면 위의 오류가 발생합니다. 예:

template<typename T>
class MyClass {
    //...
};

class MyDerivedClass: public MyClass {
    //...
};

이 코드는 "템플릿 인스턴스화 유형에서 파생은 허용되지 않습니다"라는 오류 메시지를 표시합니다.

이 오류가 발생하는 이유는 MyClass가 실제로 실제 클래스가 아닌 템플릿 인스턴스화 유형이기 때문입니다. 따라서 템플릿 인스턴스화 유형에서 새 하위 클래스를 파생시키려고 하면 위 오류가 발생합니다.

2. 솔루션

  1. 템플릿 매개변수 사용

이 문제를 해결하려면 템플릿 매개변수를 사용하여 파생될 클래스를 지정할 수 있습니다. 예를 들어, MyClass에서 새 클래스를 파생시키려면 다음과 같이 작성할 수 있습니다.

template<typename T>
class MyClass {
    //...
};

template
class MyDerivedClass: public MyClass {
    //...
};

이렇게 하면 오류가 방지됩니다.

  1. 템플릿 별칭 사용

또한 템플릿 별칭(템플릿 별칭)을 사용하여 이 문제를 해결할 수도 있습니다. 템플릿 별칭은 템플릿에 새 이름을 제공할 수 있으며, 이는 프로그램에서 사용하기 편리합니다. 예를 들어 위 코드에서 템플릿 별칭은 다음과 같이 정의할 수 있습니다.

template<typename T>
using MyNewClass = MyClass<T>;

class MyDerivedClass: public MyNewClass<int> {
    //...
};

이 방법으로 클래스는 템플릿 별칭에서 파생될 수 있습니다.

요약

C++에서는 템플릿을 사용하는 것이 매우 일반적인 관행이지만 파생 클래스에서 템플릿 인스턴스화 유형을 사용할 때 "템플릿 인스턴스화 유형에서 파생된 것은 허용되지 않습니다"라는 컴파일러 오류가 발생하기 쉽습니다. 두 가지 해결 방법이 있습니다. 하나는 템플릿 매개 변수를 사용하여 파생될 클래스를 지정하는 것이고, 다른 하나는 템플릿 별칭을 사용하여 템플릿에 새 이름을 제공하는 것입니다. 위의 방법을 사용하면 이 문제를 쉽게 해결할 수 있습니다.

위 내용은 C++ 오류: 템플릿 인스턴스화 유형에서 파생된 것이 허용되지 않습니다. 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.