Пытался собрать проект из основного 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 to
Cardgame::Cardgame(int)'
main.cpp:(.text+0x36): undefined reference to Cardgame::Cardgame(int)'
main.cpp:(.text+0x47): undefined reference to
Cardgame::Cardgame(int)'
main.cpp:(.text+0x58): undefined reference to Cardgame::Cardgame(int)'
main.cpp:(.text+0x64): undefined reference to
Cardgame::~Cardgame()'
main.cpp:(.text+0x70): undefined reference to Cardgame::~Cardgame()'
main.cpp:(.text+0x7c): undefined reference to
Cardgame::~Cardgame()'
main.cpp:(.text+0x88): undefined reference to Cardgame::~Cardgame()'
main.cpp:(.text+0xa9): undefined reference to
Cardgame::~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 to
std::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
Возможно стоит добавить какие-нибудь ключи при компиляции?
Нужно в команде все .cpp файлы указать: g++ -g main.cpp funcs.cpp -o CardGame
Если вы хотите скомпилировать все сразу, то в командной строке компилятора надо сразу указывать все .cpp
файлы, как указано в ответе @HolyBlackCat.
Если же вы хотите компилировать .cpp
файлы по одному, то вам нужно подавлять работу линкера при компиляции отдельных .cpp
файлов. А линковку выполнять только когда уже все .cpp
файлы скомпилированы,
g++ -g main.cpp -с
g++ -g funcs.cpp -с
g++ -g main.o funcs.o -o CardGame
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня такая проблемаПытаюсь по нажатию кнопки выполнять SQL запрос по добавлению данных в БД, но ничего не выходит, а выводится ошибка:
Я недавно ночью писал код и допустил ошибкуМне нужно было записать в виртуальную память процесса указатель на нужную функцию
у меня есть код на с++, нужно найти в чем заключается ошибка, описать ее, и по возможности исправить:)
Функция выдаёт случайные числа в определённом диапазоне с исключениемИсключений может быть сколько угодно