> 백엔드 개발 > C++ > 본문

C++ 컴파일 오류: '정의되지 않은 참조'를 해결하는 방법은 무엇입니까?

WBOY
풀어 주다: 2023-08-26 22:06:25
원래의
3664명이 탐색했습니다.

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

C++ 컴파일 오류: '정의되지 않은 참조'를 해결하는 방법은 무엇입니까?

소개:
C++로 프로그래밍할 때 때때로 "정의되지 않은 참조"와 유사한 컴파일 오류 메시지가 표시됩니다. 이러한 유형의 오류는 일반적으로 링크 오류로 인해 발생합니다. 이는 링크 프로세스 중에 컴파일러가 관련 함수나 변수의 정의를 찾을 수 없기 때문에 발생합니다. 이 기사에서는 몇 가지 일반적인 원인과 해결 방법을 소개하고 코드 예제를 사용하여 독자가 이러한 문제를 더 잘 이해하고 해결하도록 돕습니다.

1. 원인 분석:

  1. 정의되지 않은 함수/변수: 함수나 변수를 사용할 때 해당 정의가 코드에 없으면 "정의되지 않은 참조" 오류가 발생합니다. 이는 함수/변수 이름의 철자가 틀렸거나, 일관되지 않은 함수/변수 선언 또는 정의, 함수/변수가 올바르게 포함되지 않았기 때문일 수 있습니다.
  2. 잘못된 연결 순서: 코드에 여러 소스 파일이 있고 이들 사이에 상호 종속성이 있는 경우 컴파일러는 연결 시 올바른 순서로 연결해야 합니다. 연결 순서가 잘못된 경우 "정의되지 않은 참조" 오류가 발생합니다.

2. 해결 방법:
1. 함수/변수 정의 및 선언 확인: 먼저 대문자 사용에 특히 주의하면서 함수/변수 이름의 철자가 올바른지 확인하세요. 둘째, 매개변수 유형, 반환값 유형 등을 포함하여 함수/변수의 선언과 정의가 일치하는지 확인하세요. 함수/변수가 다른 소스 파일에 정의된 경우 올바른 헤더 파일을 참조하고 소스 파일을 함께 컴파일하고 링크하십시오.

샘플 코드 1:

// File1.cpp
#include "MyClass.h"
void foo();

int main() {
    foo();
    return 0;
}

// File2.cpp
#include <iostream>
#include "MyClass.h"
void foo() {
    MyClass obj;
    obj.bar();
}

// MyClass.h
class MyClass {
public:
    void bar();
};
로그인 후 복사

위 샘플 코드에서는 MyClass라는 클래스를 정의하고 File1.cpp라는 클래스를 호출합니다. 함수 코드>foo( )는 File2.cpp에서 foo() 함수의 정의를 구현합니다. MyClass 클래스는 MyClass.h 헤더 파일에 선언되어 있습니다. File1.cppFile2.cpp를 컴파일할 때 "'foo()'에 대한 정의되지 않은 참조" 오류가 발생하는 경우 foo()를 확인해야 합니다. 함수의 선언과 정의가 일관성이 있는지, MyClass.h 헤더 파일이 올바르게 참조되는지 확인하세요. MyClass的类,在File1.cpp中调用了一个名为foo()的函数,在File2.cpp中实现了foo()函数的定义。注意,在MyClass.h头文件中声明了MyClass类。如果在编译File1.cppFile2.cpp时出现"undefined reference to 'foo()'"的错误,应该检查foo()函数的声明和定义是否一致,并确保正确引用了MyClass.h头文件。

2.检查链接顺序:如果代码中存在多个源文件,并且它们之间有相互依赖的关系,编译器在链接时需要按照正确的顺序进行链接。我们可以通过将源文件按正确的顺序传递给编译器来解决此问题,或者使用链接器提供的命令行选项指定链接顺序。

示例代码2:

// File1.cpp
#include "File2.h"
void foo();

int main() {
    foo();
    return 0;
}

// File2.h
void foo();

// File2.cpp
#include "File2.h"
void foo() {
    // do something
}
로그인 후 복사

在上述示例代码中,File1.cpp依赖于File2.cpp中定义的foo()函数。如果在编译时出现"undefined reference to 'foo()'"的错误,应该检查File2.cpp

2. 연결 순서 확인: 코드에 여러 소스 파일이 있고 이들 사이에 상호 종속성이 있는 경우 컴파일러는 연결 시 올바른 순서로 연결해야 합니다. 소스 파일을 올바른 순서로 컴파일러에 전달하거나 링커에서 제공하는 명령줄 옵션을 사용하여 연결 순서를 지정하여 이 문제를 해결할 수 있습니다.

샘플 코드 2:

g++ -o main File2.cpp File1.cpp
로그인 후 복사

위 샘플 코드에서 File1.cppFile2.cpp 함수에 정의된 foo()에 의존합니다. . 컴파일 도중 "'foo()'에 대한 정의되지 않은 참조" 오류가 발생하는 경우 File2.cpp의 컴파일 순서가 올바른지 확인해야 합니다. 이 두 파일을 올바른 순서로 컴파일할 수 있습니다(예:

g++ -o main File1.cpp File2.cpp
로그인 후 복사

). 또는 컴파일 타임에 링크 순서를 지정할 수 있습니다: rrreee🎜 경우에 따라 조정해야 하는 더 복잡한 경우가 있을 수 있습니다. 기초. 🎜🎜결론: 🎜C++ 프로그래밍에서 "정의되지 않은 참조" 오류는 일반적인 연결 오류입니다. 이 오류를 해결할 때 함수/변수 정의 및 선언을 다시 확인하여 이름 철자가 정확하고 범위가 올바른지 확인해야 합니다. 소스 파일이 여러 개인 경우에는 링크 순서가 올바른지 구체적으로 확인해야 합니다. 위의 솔루션과 샘플 코드를 통해 독자들은 이러한 오류를 더 잘 이해하고 해결하며 프로그래밍 효율성을 향상시킬 수 있다고 믿습니다. 🎜

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿