>백엔드 개발 >C++ >C++ 컴파일 오류: '클래스::함수'에 대한 정의되지 않은 참조를 해결하는 방법은 무엇입니까?

C++ 컴파일 오류: '클래스::함수'에 대한 정의되지 않은 참조를 해결하는 방법은 무엇입니까?

WBOY
WBOY원래의
2023-08-25 17:56:50886검색

解决C++编译错误:'undefined reference to 'class::function'',如何解决?

C++ 컴파일 오류 해결: '클래스::함수'에 대한 정의되지 않은 참조', 어떻게 해결하나요?

C++ 프로그램을 작성할 때 컴파일 오류가 자주 발생합니다. 일반적인 오류 중 하나는 "'class::function'에 대한 정의되지 않은 참조" 오류입니다. 이 오류는 일반적으로 C++ 소스 파일에서 참조되는 클래스의 함수 또는 멤버로 인해 발생하지만 컴파일 프로세스 중에 해당 함수 정의 또는 구현을 찾을 수 없습니다. 이번 글에서는 이 오류의 원인에 대해 알아보고 해결 방법을 알려드리겠습니다.

이 오류를 해결하기 전에 C++ 컴파일 프로세스와 관련된 몇 가지 지식을 이해해야 합니다. C++의 컴파일은 컴파일과 링크의 두 단계로 나누어집니다. 컴파일 과정에서 컴파일러는 소스 파일의 코드를 확인하고 해당 개체 파일을 생성합니다. 연결 과정에서 컴파일러는 개체 파일과 기타 라이브러리 파일을 함께 연결하여 실행 파일을 생성합니다.

C++ 소스 파일에서 함수나 클래스 멤버를 호출하면 컴파일러는 컴파일 프로세스 중에 해당 개체 파일을 생성하고 연결 프로세스 중에 호출을 구문 분석합니다. 그러나 연결 과정에서 이 함수의 정의나 구현을 찾을 수 없으면 'class::function'에 대한 정의되지 않은 참조 오류가 발생합니다.

그렇다면 이 오류를 어떻게 해결해야 할까요? 몇 가지 가능한 해결 방법은 다음과 같습니다.

  1. 함수의 정의 또는 구현이 소스 파일에 있는지 확인하세요.

먼저, 클래스 함수의 정의 또는 구현이 소스 파일에 있는지 확인해야 합니다. . 이 함수가 올바르게 정의되거나 구현되지 않으면 컴파일러가 이를 찾을 수 없어 링크 오류가 발생합니다.

샘플 코드는 다음과 같습니다.

// MyClass.h
class MyClass {
public:
    void myFunction();
};

// MyClass.cpp
#include "MyClass.h"
void MyClass::myFunction() {
    // Function implementation
}

이 예제에서는 헤더 파일 "MyClass.h"에 MyClass 클래스를 선언하고 소스 파일 "MyClass.cpp"에 myFunction 함수를 구현합니다.

  1. 함수의 네임스페이스를 확인하세요.

클래스가 네임스페이스에 정의된 경우 클래스의 함수를 호출할 때 함수가 속한 네임스페이스를 지정해야 합니다. 그렇지 않으면 컴파일러는 함수를 클래스의 멤버 함수가 아닌 전역 함수로 간주합니다.

샘플 코드는 다음과 같습니다.

// MyClass.h
namespace MyNamespace {
    class MyClass {
    public:
        void myFunction();
    };
}

// MyClass.cpp
#include "MyClass.h"
void MyNamespace::MyClass::myFunction() {
    // Function implementation
}

이 예에서는 "MyNamespace" 네임스페이스에 MyClass 클래스를 정의합니다. myFunction 함수를 호출할 때 "MyNamespace::MyClass" 구문을 사용해야 합니다.

  1. 함수의 선언과 정의가 일치하는지 확인하세요.

클래스에 있는 함수의 매개변수 목록이 선언과 정의와 일치하지 않으면 컴파일러도 오류를 보고합니다. 함수를 호출할 때 전달된 매개변수가 함수 정의에 있는 매개변수의 유형, 순서, 개수와 일치하는지 확인하세요.

샘플 코드는 다음과 같습니다.

// MyClass.h
class MyClass {
public:
    void myFunction(int x, int y);
};

// MyClass.cpp
#include "MyClass.h"
void MyClass::myFunction(int x, int y) {
    // Function implementation
}

이 예에서 myFunction 함수는 두 개의 정수 매개변수를 허용합니다. 함수를 호출할 때 동일한 개수와 유형의 인수를 전달해야 합니다.

요약하자면 '클래스::함수'에 대한 정의되지 않은 참조' 오류를 해결하려면 함수의 정의나 구현이 존재하는지, 함수가 속한 네임스페이스가 올바른지, 선언과 정의가 올바른지 주의 깊게 확인해야 합니다. 기능 일치의. 함수를 올바르게 정의 및 구현하고 호출 시 매개변수가 올바르게 전달되도록 하면 이러한 컴파일 오류를 피할 수 있습니다.

이 기사가 독자들이 유사한 컴파일 오류를 해결하고 C++ 프로그램 작성의 효율성과 품질을 향상시키는 데 도움이 되기를 바랍니다.

위 내용은 C++ 컴파일 오류: '클래스::함수'에 대한 정의되지 않은 참조를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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