Задать вопрос
@Nemovok
Учусь в школе =)

Undefined reference to?

Добрый день! Получаю вот такие ошибки компилятора:
/tmp/cc6E8ltA.o: In function `main':
main.cpp:(.text+0x24): undefined reference to `Hero::view(int)'
main.cpp:(.text+0x30): undefined reference to `Hero::show()'
main.cpp:(.text+0x41): undefined reference to `Hero::view(int)'
main.cpp:(.text+0x4d): undefined reference to `Hero::show()'
collect2: error: ld returned 1 exit status


main.cpp
#include <iostream>
#include "classes.h"

int main (void)
{
  Hero n1;
  n1.view (1);
  n1.show ();
  Hero n2;
  n2.view (2);
  n2.show ();
  return 0;
}


classes.h
class Hero{
  private:
    int life_;

    char view_;
  public:
    void view (int); 
    void show (void);
};


methods.cpp
#include "classes.h"
#include <cstring>

void Hero::view (int value)
{
  if (value == 1)
  {
    strcpy (view_, "Hunter");
    life_ = 10000;
  }
  if (value == 2)
  {
    strcpy (view_, "Soldier");
    life_ = 600;
  }
}

void Hero::show ()
{
  std::cout << "View: " << view_ << std::endl
            << "Life: " << life_ << std::endl;
}


Что не так?
  • Вопрос задан
  • 10922 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
В проект не включили файл methods.cpp. Потому линкер говорит, что нет этих функций.

Язык Си (как, впрочем, и большинство ассемблеров) собирает cpp-файлы воедино неязыковыми средствами: makefile’ами и файлами проектов. Сначала компилятор обрабатывает все единицы компиляции отдельно друг от друга, а потом линкер собирает из того, что получилось, исполняемый файл. Разумеется, если где-то какой-то функции не нашлось, это можно опознать только при линковке.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vilgeforce
Раздолбай и программист
Линкер на вход не получил объектник с реализацией указанных методов. Либо получил, но там фигня какая-то с именами. По приведенным данным точнее не сказать, нужно знать как именно вы все это собираете.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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