ошибка при компиляции - связывание .cpp & заголовочного файла - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь связать мой файл реализации .cpp с моим заголовочным файлом - я получаю это сообщение об ошибке из моего терминала Mac -

rowlandev:playground rowlandev$ g++ main.cpp -o main
Undefined symbols for architecture x86_64:
  "Person::Person()", referenced from:
      _main in main-32e73b.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Вот код в моем файле cpp:

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

using namespace std;

Person::Person() {
    cout << "this is running from the implementation file" << endl;
}

вот код с моей основной функцией:

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

using namespace std;

int main() {
    Person chase;
}

и вот код в моем заголовочном файле:

  #include <string>

    using namespace std;


    #ifndef playground_h
    #define playground_h

    class Person {
    public:
        Person();
    private:
        string name;
        int age;
    };


    #endif /* playground_h */

что я должен сделать, чтобы исправить эту ошибку? Не стесняйтесь добавлять любые другие вещи, которые я могу сделать, чтобы улучшить код, который я только что написал. Открыто для всего.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Вот хорошее прочтение, чтобы понять, что происходит, когда вы пытаетесь создать исполняемый файл из исходного кода: Как работает процесс компиляции / компоновки?

Здесь происходит то, что компоновщик не знает, где находится Person::Person(), который вызывается в main(). Обратите внимание, что когда вы вызывали g ++, вы никогда не передавали ему файл, в котором написали код для Person::Person().

Правильный способ вызова g ++: $ g++ -o main main.cpp person.cpp

0 голосов
/ 10 сентября 2018

Ошибка ссылки говорит о том, что связанный не может найти конструктор. Конструктор находится не в main.cpp, а в другом вашем файле, который в вашем примере не назван. Попробуйте поместить все это в один файл cpp, чтобы заставить его работать.

...