неопределенная ссылка на `Math :: addNumbers (int, int) '

0

это крошечная простая программа для моего обучения:

это объявление заголовка:

#ifndef MATH_H
#define MATH_H

class Math
{
    private:
         int result;

    public:

        int addNumbers (int , int);
};

#endif // MATH_H

это определение класса:

#include <iostream>
#include "Math.h"

using namespace std;

int Math::addNumbers(int a , int b)
{
    result = a + b ;
    cout<<result<<endl;

};

и этот бог чертовски Главный;)

#include <iostream>
#include "Math.h"

using namespace std;

int main()
{
    Math myMath;
    myMath.addNumbers(2,9);
};

и, наконец, я получил эту ошибку:

undefined reference to 'Math::addNumbers(int, int)

я должен сказать вам: файл заголовка имеет то же имя, что и мое имя класса,

в чем проблема?

с наилучшими пожеланиями.

Амин хормей

поэтому правильная основная строка должна быть такой, как показано ниже:

#include <iostream>
#include "Math.h"
#include "MathDefinition.cpp"

using namespace std;

int main()
{
    Math myMath;
    myMath.addNumbers(2,9);
};
  • 0
    Вы добавили свой Math источник для связи?
  • 0
    С какими инструментами или IDE вы работаете?
Показать ещё 1 комментарий
Теги:
linker
header

2 ответа

0
Лучший ответ

Проблема в том, что в программе, которую вы пытаетесь создать, отсутствует определение для Math::addNumbers. Вероятно, это связано с тем, что вы пытаетесь создать свой основной исходный файл.
Вам нужно сделать так, чтобы код, определяющий Math::addNumbers попадает в вашу программу. Для этого у вас есть два основных варианта (предположим, что ваши файлы называются main.cpp и math.cpp):

  • Вы можете изменить свою систему сборки, чтобы скомпилировать math.cpp. Обычно это рассматривается как правильный способ справиться с этой ситуацией. К сожалению, особенности зависят от вашей системы сборки или IDE...
    Например, если вы используете gcc, вы можете связать оба файла с вашим двоичным кодом, используя следующую команду сборки:

    gcc -o myprogram main.cpp math.cpp

  • Вы можете просто #include "math.cpp" внутри main.cpp. Это приведет к тому, что код math.cpp станет частью main.cpp после предварительной обработки. Обычно это не рекомендуется для этого, но менее ориентирован на среду, чем "правильное" решение

  • 0
    спасибо, сейчас работает
0

Возможно, вы не правильно компилируете свой код. Скомпилируйте его с помощью:

gcc main.cpp math.cpp -o math.o

Или короче:

gcc *.cpp -o math.o

Это скомпилирует файлы math.cpp и main.cpp

  • 0
    Порядок может иметь значение!
  • 0
    Я не профессионал в программировании, я изучаю c ++ для целей 3D-анимации, не могли бы вы объяснить это проще и сказать мне, как это сделать. Вы знаете, какой первый ответ был правильным, но и решили мою проблему, на самом деле мы должны включить файлы заголовков, и нам не нужно включать оба файла.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню