Рейтинг:-1

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

флаг ng

Я использую Ubuntu 16.04. Когда я пытаюсь скомпилировать программу с помощью

g++ -g main.cpp -o основной

Это моя версия g++

г++ --версия
g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Авторское право (C) 2019 Free Software Foundation, Inc.
Это бесплатное программное обеспечение; см. источник условий копирования. Здесь нет
гарантия; даже не для КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ.

Я получаю эту ошибку компиляции

main.cpp:8: неопределенная ссылка на `Helper::IsStringNumeric(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: ошибка: ld вернул 1 статус выхода

основной.cpp:

#include "Помощник.h"
#include <иопоток>
#include <вектор>


основной ()
{
    std::cout << Helper::IsStringNumeric("200");
}

Помощник.h

#ifndef HELPER_H
#define HELPER_H

#include <вектор>
#include <строка>
помощник класса
{
частный:
    /* данные */
публичный:
    
   статическое логическое значение IsStringNumeric (const std::string &str);
   
};

#endif

Helper.cpp

#include "Помощник.h"
#include <строка>
#include <алгоритм>
bool Helper::IsStringNumeric(const std::string &str)
{
    std::string::const_iterator iterator = str.begin();
    
    в то время как (итератор != str.end() && std::isdigit(*iterator))
    {
        ++итератор;
    }
    return !str.empty() && iterator == str.end();
}

Мои файлы cpp и заголовков кажутся правильными, поэтому я не уверен, почему я получаю ошибки

Рейтинг:2
флаг hr

Добавление #include "Помощник.h" на ваш main.cpp делает декларация из Помощник::IsStringNumeric виден компилятору, но вам все равно нужно скомпилировать Helper.cpp к объектному коду, чтобы сделать определение из Помощник::IsStringNumeric доступно, когда вы свяжете свой главный программа.

Вы можете скомпилировать каждую единицу перевода в объектный код файл а затем связать их:

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 основной

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.