C ++ Неопределенная ссылка на функцию

Я использую ubuntu 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

main.cpp:

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


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

Helper.h

#ifndef HELPER_H
#define HELPER_H

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

#endif

Helper.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
задан 25 June 2021 в 20:07

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
2
ответ дан 28 July 2021 в 11:25

Другие вопросы по тегам:

Похожие вопросы: