ошибка компилятора при объявлении функции-конструктора

Я работаю над своей серьезной программой на С++. Прошло некоторое время с тех пор, как я брал уроки, поэтому я немного заржавел. Приступая к базовой реализации игрового цикла (после того, как ВСЕГДА потратил на то, чтобы заставить SFML работать), я постоянно сталкивался с проблемами. Через некоторое время я сократил свой список проблем до ошибки при попытке определить функцию-конструктор. Я получаю следующую ошибку при попытке скомпилировать.

1>game.obj: ошибка LNK2005: "public: __thiscall game::game(void)" (??0game@@QAE@XZ) уже определено в main.obj

1>game.obj: ошибка LNK2005: «public: void __thiscall game::gameLoop(void)» (?gameLoop@game@@QAEXXZ), уже определенный в main.obj

Мой код в основном

#include <SFML/Graphics.hpp>

#include "game.cpp"

int main()
{
    return 0;
}

в игре.h это

#ifndef _game_h
#define _game_h

class game
{
public:
     game();
    void gameLoop();
};

#endif

а в game.cpp это

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

game::game()
{
    std::cout << "Constructed thingie";
}

void game::gameLoop()
{
    std::cout << "RAN LOOP!" << std::endl;
}

Я не знаю, почему я сталкиваюсь с этой ошибкой. Любая помощь была бы приятной, так как я хотел бы начать работу над своим проектом.


person Legacyblade    schedule 25.07.2012    source источник
comment
не включайте .cpp в основной   -  person lurscher    schedule 26.07.2012


Ответы (1)


Вы должны включить #include "game.h" в main, а не game.cpp.

person Man of One Way    schedule 25.07.2012
comment
Это просто приводит к тому, что game.cpp не знает, что такое игра класса. Даже если я включу game.cpp в game.h, не знаю, как это должно помочь. --edit-- Ничего себе. Включение game.h как в main, так и в game.cpp по какой-то причине заставляет его компилироваться. - person Legacyblade; 26.07.2012
comment
Я думаю, вы неправильно поняли, вы не должны удалять game.h из game.cpp, просто замените game.cpp в main на game.h - person Man of One Way; 26.07.2012
comment
Да, это сработало. Я просто неправильно истолковал это как перенос включения game.h в main.cpp, а не включение game.h, а не game.cpp в main.cpp. Теперь все работает нормально :) Не знаю, как закрыть вопрос. - person Legacyblade; 26.07.2012