Неопределенная ссылка на конструктор, определенный в файле реализации - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь написать программу на C ++ с использованием Atom Editor в Ubuntu 18.04. Я очень плохо знаком с использованием Linux, и весь мой предыдущий опыт написания кода был на компьютерах и IDE, которые уже были настроены для меня, так что, надеюсь, это простое исправление. Насколько я знаю, я правильно установил G CC. Выполнение which gcc g++ в Терминале возвращает

/usr/bin/gcc
/usr/bin/g++

, и я использую пакет gpp-compiler с Atom для компиляции и запуска своих программ в Atom.

Моя программа в настоящее время состоит из файла заголовка «Creature.h» с конструктором и методами

#ifndef CREATURE_H
#define CREATURE_H

class Creature {
    private:
        int fHealth;

    public:
        Creature(int Health);

        virtual ~Creature(){}

        void setHealth(int Health){fHealth = Health;}
        int getHealth(){return fHealth}

};
#endif

с конструктором, определенным в файле реализации «Creature. cpp»:

#include "Creature.h"

Creature::Creature(int Health){
    setHealth(Health);
}

Когда я затем создаю экземпляр этого класса в моей основной программе, например

#include "iostream"
#include "Creature.h"

using namespace std;

int main(){

    Creature MyCreature(10);

    cout<<MyCreature.getHealth()<<endl;

    return 0;
}

и попытаться скомпилировать и запустить мою программу, я получаю ошибку

/tmp/cc4H4p2l.o: In function `main':
<br/>main.cpp:(.text+0x47): undefined reference to `Creature::Creature(int)'
collect2:error: ld returned 1 exit status

Из моего ограниченного понимания и проведенного мной исследования мне кажется, что либо файл Creature. cpp не скомпилирован, либо полученные объектные файлы не связаны.

В первом случае я не уверен, как скомпилировать только Существо. Файл cpp, как будто я пытаюсь сделать это в Atom, он также пытается запустить файл и завершается неудачей, поскольку очевидно, что нет основной функции. Я также попытался сделать это в терминале, выполнив g++ -c Creature.cpp и все еще получаю ту же ошибку.

Во втором случае я не совсем уверен, что это значит или как это сделать.

Заранее спасибо за любую помощь, которую я могу получить.

1 Ответ

0 голосов
/ 09 апреля 2020

Вы можете создать свою программу, используя:

g++ *.cpp -Wall -Wextra

Избегайте записи всех имен ваших ccp-файлов.

Предупреждения - это бонус, всегда хорошая идея.

...