Компилятор не видит реализацию функций C++

159
31 августа 2018, 19:10

Пытался собрать проект из основного main.cpp, а также заголовочного funcs.hpp и его реализации funcs.cpp.

Код (Пример из документации к vs):

main.cpp

#include <iostream>
#include "funcs.hpp"
using namespace std;
void PlayGames()
{
    Cardgame bridge(4);
    Cardgame blackjack(8);
    Cardgame solitaire(1);
    Cardgame poker(5);
}
int main()
{
    int n;
    PlayGames();
    getchar();
    return 0;
}

funcs.cpp

#include <iostream>
#include "funcs.hpp"
using namespace std;
int Cardgame::totalParticipants = 0;
Cardgame::Cardgame(int players)
    : players(players)
{
    totalParticipants += players;
    cout << players << " players have started a new game.  There are now "
         << totalParticipants << " players in total." << endl;
}
Cardgame::~Cardgame()
{
}

funcs.hpp

#pragma once
class Cardgame
{
    int players;
    static int totalParticipants;
public:
    Cardgame(int players);
    ~Cardgame(void);
    static int GetParticipants() { return totalParticipants; }
};

Компилятор выдаёт: g++ -g main.cpp -o CardGame /tmp/ccg6sGIc.o: In function PlayGames()': main.cpp:(.text+0x25): undefined reference toCardgame::Cardgame(int)' main.cpp:(.text+0x36): undefined reference to Cardgame::Cardgame(int)' main.cpp:(.text+0x47): undefined reference toCardgame::Cardgame(int)' main.cpp:(.text+0x58): undefined reference to Cardgame::Cardgame(int)' main.cpp:(.text+0x64): undefined reference toCardgame::~Cardgame()' main.cpp:(.text+0x70): undefined reference to Cardgame::~Cardgame()' main.cpp:(.text+0x7c): undefined reference toCardgame::~Cardgame()' main.cpp:(.text+0x88): undefined reference to Cardgame::~Cardgame()' main.cpp:(.text+0xa9): undefined reference toCardgame::~Cardgame()' /tmp/ccg6sGIc.o:main.cpp:(.text+0xba): more undefined references to Cardgame::~Cardgame()' follow /tmp/ccg6sGIc.o: In function__static_initialization_and_destruction_0(int, int)': main.cpp:(.text+0x120): undefined reference to std::ios_base::Init::Init()' main.cpp:(.text+0x135): undefined reference tostd::ios_base::Init::~Init()' /tmp/ccg6sGIc.o:(.data.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): undefined reference to `__gxx_personality_v0'
collect2: error: ld returned 1 exit status

Возможно стоит добавить какие-нибудь ключи при компиляции?

Answer 1

Нужно в команде все .cpp файлы указать: g++ -g main.cpp funcs.cpp -o CardGame

Answer 2

Если вы хотите скомпилировать все сразу, то в командной строке компилятора надо сразу указывать все .cpp файлы, как указано в ответе @HolyBlackCat.

Если же вы хотите компилировать .cpp файлы по одному, то вам нужно подавлять работу линкера при компиляции отдельных .cpp файлов. А линковку выполнять только когда уже все .cpp файлы скомпилированы,

g++ -g main.cpp 
g++ -g funcs.cpp 
g++ -g main.o funcs.o -o CardGame
READ ALSO
Qt/Sqlite вствка в БД

Qt/Sqlite вствка в БД

У меня такая проблемаПытаюсь по нажатию кнопки выполнять SQL запрос по добавлению данных в БД, но ничего не выходит, а выводится ошибка:

157
Что представляет из себя функция в c++

Что представляет из себя функция в c++

Я недавно ночью писал код и допустил ошибкуМне нужно было записать в виртуальную память процесса указатель на нужную функцию

176
Найти и описать ошибку в коде с++ [закрыт]

Найти и описать ошибку в коде с++ [закрыт]

у меня есть код на с++, нужно найти в чем заключается ошибка, описать ее, и по возможности исправить:)

155
Можно ли напрямую в функцию передать массив?

Можно ли напрямую в функцию передать массив?

Функция выдаёт случайные числа в определённом диапазоне с исключениемИсключений может быть сколько угодно

187