>백엔드 개발 >C++ >C++ 컴파일 오류: 템플릿 매개변수가 이 유형에 적용되지 않습니다. 어떻게 수정해야 합니까?

C++ 컴파일 오류: 템플릿 매개변수가 이 유형에 적용되지 않습니다. 어떻게 수정해야 합니까?

WBOY
WBOY원래의
2023-08-22 14:15:44925검색

C++ 컴파일 오류: 템플릿 매개변수가 이 유형에 적용되지 않습니다. 어떻게 수정해야 합니까?

C++는 프로그래머가 다양한 데이터 유형 및 알고리즘에 공통적인 코드를 빠르게 생성할 수 있는 다양한 템플릿이 포함되어 널리 사용되는 프로그래밍 언어입니다. 그러나 템플릿을 사용할 때 일부 컴파일 오류가 발생할 수도 있습니다. 그 중 하나는 "템플릿 매개변수가 이 유형에 적용되지 않습니다."입니다. 이 문서에서는 이 오류에 대한 배경, 원인 및 해결 방법을 자세히 설명합니다.

Background

C++의 템플릿은 다양한 유형의 코드를 생성하는 데 사용할 수 있는 일반적인 프로그래밍 패턴입니다. 예를 들어, 템플릿을 사용하여 다양한 유형의 매개변수를 수신하고 해당 유형에 따라 다양한 코드를 동적으로 호출할 수 있는 일반 함수를 생성할 수 있습니다.

C++의 템플릿 매개변수는 유형 매개변수와 비유형 매개변수로 구분됩니다. 유형 매개변수는 템플릿에 사용되는 데이터 유형을 참조하고, 비유형 매개변수는 일부 상수나 함수 포인터 등을 참조합니다. 이러한 매개변수는 컴파일 타임에 결정되어야 합니다.

일반적으로 템플릿에 사용되는 유형 매개변수는 다양한 데이터 유형에 적용 가능해야 하지만, 가끔 "템플릿 매개변수는 이 유형에 적용할 수 없습니다."라는 메시지와 함께 컴파일 오류가 발생합니다. 다음으로 이 오류의 원인과 해결 방법을 소개하겠습니다.

원인

템플릿 매개변수가 이 유형에 적용되지 않음 오류는 일반적으로 다음과 같은 이유로 발생합니다.

  1. 템플릿 매개변수 유형 불일치:

템플릿을 정의할 때 템플릿 매개변수의 유형이 요구 사항과 일치해야 합니다. 전달된 데이터의 유형입니다. 전달된 데이터 유형이 템플릿 매개변수 유형과 일치하지 않으면 오류가 보고됩니다.

예를 들어 다음 코드에서는 템플릿 함수를 정의하고 함수 내에서 템플릿 매개변수 T를 사용합니다.

template <typename T>
void print(T value) {
    cout << value << endl;
}

그런 다음 이 함수를 호출하고 문자열을 매개변수로 전달하면 오류가 보고됩니다.

print("hello");  // 模板参数不适用于这个类型

이것은 템플릿 함수의 매개변수 타입과 전달된 매개변수의 타입이 동일해야 하기 때문입니다. 여기에 전달되는 것은 문자열 상수이고, 템플릿 매개변수 타입이 T이므로 오류가 발생합니다.

  1. 유형이 정의되지 않았습니다.

정의되지 않은 유형을 템플릿 매개변수로 사용하면 컴파일러는 이 유형을 찾을 수 없으며 오류를 보고합니다.

예를 들어 다음 코드에서는 정의되지 않은 유형 매개변수를 사용하는 템플릿 클래스를 정의합니다.

template <typename T>
class Test {
public:
    void print(T value) {
        cout << value << endl;
    }
};

int main() {
    Test<UnknownType> a; // 模板参数不适用于这个类型
    return 0;
}

위 코드에서는 템플릿 클래스를 정의할 때 템플릿으로 전달할 때 UnknownType이라는 정의되지 않은 유형을 정의합니다. 매개변수를 사용하면 컴파일 중에 오류가 발생합니다.

  1. 템플릿 매개변수가 요구 사항을 충족하지 않습니다.

때로는 특정 데이터 유형만 전달되도록 허용하는 등 템플릿 매개변수에 몇 가지 제한 사항을 추가하기도 합니다. 우리가 전달하는 데이터 유형이 제한 사항을 충족하지 않으면 오류가 보고됩니다.

예를 들어 다음 코드에서는 정수 유형의 매개변수만 전달되도록 허용하는 템플릿 함수를 정의합니다.

template <typename T>
void print(T value) {
    static_assert(is_integral<T>::value, "只允许传入整数类型的参数");
    cout << value << endl;
}

int main() {
    print(3.14); // 模板参数不适用于这个类型
    return 0;
}

위 코드에서는 is_integral 템플릿을 사용하여 템플릿 매개변수 유형이 정수인지 확인합니다. 그렇지 않으면 오류 메시지가 인쇄됩니다. 인쇄 함수를 호출할 때 부동 소수점 매개변수를 전달하면 컴파일이 실패하게 됩니다.

해결책

템플릿 매개변수가 이 유형에 적합하지 않다는 컴파일 오류가 발생하는 경우 다음 해결 방법을 시도해 볼 수 있습니다.

  1. 템플릿 매개변수 유형이 수신 매개변수 유형과 일치하는지 확인하세요

이러한 오류가 발생하는 경우 오류가 발생하면 먼저 템플릿 매개변수 유형과 수신 매개변수 유형이 일치하는지 확인해야 합니다. 일치하지 않으면 수정해야 합니다.

  1. 사용한 타입이 정의되어 있는지 확인

정의되지 않은 타입을 템플릿 매개변수로 사용하는 경우 프로그램에서 타입을 정의하거나 정의된 타입을 사용해야 합니다.

  1. 템플릿 매개변수가 요구사항을 충족하는지 확인하세요

제한이 있는 템플릿을 사용할 때는 전달된 매개변수 유형이 요구사항을 충족하는지 확인해야 합니다. 준수하지 않는 경우 매개변수 유형을 수정하거나 제한사항을 수정해야 합니다.

요약

템플릿은 C++에서 매우 중요한 기능으로, 이를 통해 일반 코드를 보다 유연하게 작성할 수 있습니다. 그러나 템플릿을 사용할 때 "템플릿 매개변수가 이 유형에 적용되지 않습니다."라는 오류 중 하나가 발생하는 일부 컴파일 오류도 발생합니다. 이 기사에서는 독자가 C++ 템플릿을 더 잘 이해하고 사용할 수 있도록 코드 예제와 함께 이 오류의 원인과 해결 방법을 소개합니다.

위 내용은 C++ 컴파일 오류: 템플릿 매개변수가 이 유형에 적용되지 않습니다. 어떻게 수정해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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