Сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова) в macos - PullRequest
1 голос
/ 28 января 2020

Я практикую простую базу кода на C ++ на примере

class Tset{
    public:
        Tset();
        Tset operator+( const Tset& a);

};

Tset Tset::operator+(const Tset& a){
    Tset t;
    return t;
}

, но когда я использую g ++ для компиляции этого кода, возникает эта ошибка

Mac Desktop % g++ hw2.cpp
Undefined symbols for architecture x86_64:
  "Tset::Tset()", referenced from:
      Tset::operator+(Tset const&) in hw2-43d108.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Может кто-нибудь сказать мне, что не так ?

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

Mac Desktop % g++ -v     
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 11.0.0 (clang-1100.0.33.12)
Target: x86_64-apple-darwin19.0.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

1 Ответ

0 голосов
/ 28 января 2020

Проблема в том, что вы не предоставили определение конструктора.

Эта функция неявно вызывает Tset::Tset(), конструктор:

Tset Tset::operator+(const Tset& a){
    Tset t;    // Requires definition of constructor.
    return t;
}

Но в вашем классе вы не определяйте конструктор:

class Tset {
public:
    Tset();            // No definition.  :-(
    Tset operator+(const Tset& a);
};

Это можно исправить, указав определение конструктора или по умолчанию конструктор:

class Tset {
public:
    Tset() = default;
    Tset operator+( const Tset& a);
};
...