C++ 함수에 대한 정의되지 않은 참조

C++ 함수에 대한 정의되지 않은 참조

우분투 16.04를 사용하고 있습니다.

g++ -g main.cpp -o main

이것은 내 g++ 버전입니다.

g++ --version
g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

이 컴파일 오류가 발생합니다.

main.cpp:8: undefined reference to `Helper::IsStringNumeric(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status

메인.cpp:

#include "Helper.h"
#include <iostream>
#include <vector>


int main()
{
    std::cout << Helper::IsStringNumeric("200");
}

헬퍼.h

#ifndef HELPER_H
#define HELPER_H

#include <vector>
#include <string>
class Helper
{
private:
    /* data */
public:
    
   static bool IsStringNumeric(const std::string &str);
   
};

#endif

도우미.cpp

#include "Helper.h"
#include <string>
#include <algorithm>
bool Helper::IsStringNumeric(const std::string &str)
{
    std::string::const_iterator iterator = str.begin();
    
    while (iterator != str.end() && std::isdigit(*iterator))
    {
        ++iterator;
    }
    return !str.empty() && iterator == str.end();
}

내 cpp 및 헤더 파일이 올바른 것 같습니다. 그래서 오류가 발생하는 이유를 잘 모르겠습니다.

답변1

귀하의 제품 #include "Helper.h"에 추가하면main.cpp선언Helper::IsStringNumeric컴파일러에는 표시되지만, 개체 코드를 만들기 위해서는 여전히 개체 코드로 컴파일해야 합니다 Helper.cpp.정의Helper::IsStringNumeric프로그램 을 연결하면 사용할 수 있습니다 main.

각 번역 단위를 객체 코드로 컴파일할 수 있습니다.파일그런 다음 연결하세요.

g++ -g -o main.o -c main.cpp
g++ -g -o Helper.o -c Helper.cpp
g++ main.o Helper.o -o main

또는 (간단한 프로그램의 경우) 한 단계로 모든 작업을 수행합니다.

g++ -g main.cpp Helper.cpp -o main

관련 정보