Переопределение типа "class" C++
Есть главный файл main.cpp и main.h. В main.cpp подключается заголовок Engine.h. Компилятор выдает ошибку переопределения типа "class"
main.cpp
#include "main.h"
#include "Engine.h"
using namespace std;
int main()
{
Game game = Game("init");
cout << game.getState() << endl;
return 0;
}
main.h
#pragma once
#include <iostream>
Engine.cpp
#include "Engine.h"
using namespace std;
class Game
{
public:
Game(string state)
{
this->state = state;
}
string getState()
{
return this->state;
}
private:
string state;
};
Engine.h
#pragma once
#include <string>
using namespace std;
class Game
{
public:
Game(string state);
string getState();
private:
string state;
};
Собирается через CMake
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
Рассмотрим ваш Engine.cpp:
#include "Engine.h"
using namespace std;
class Game
{
public:
Т.е., когда будет включен ваш Engine.h, получится что-то вроде
#include <string>
using namespace std;
class Game
{
public:
Game(string state);
string getState();
private:
string state;
};
using namespace std;
class Game
{
public:
...
Т.е. класс Game у вас определяется в этой единице трансляции дважды.
Дальше пояснять не нужно?
Автор решения: AlexGlebe
→ Ссылка
Повторно определять класс class Game { нельзя.
А в Engine.cpp можно сделать полное определение методов которые вы предварительно объявили так :
# include "Engine.h"
Game :: Game(string state)
{
this->state = state;
}
string Game :: getState()
{
return this->state;
}
где Game :: означает область (класс), для кого эта функция определяется.