Я получаю сумасшедшие критические ошибки компилятора при попытке построить мое решение на VS2010. Мне очень трудно понять, как они работают.Заголовки C++ и файлы cpp - как я их справляюсь?
Game.cpp
Game.h
Deck.cpp
Deck.h
Card.h
// Game.cpp
#include "Game.h"
Все в порядке. Теперь мне нужно, чтобы создать новую колоду:
// Game.h
private:
static Deck _deck;
Ну тогда мне нужно включить deck.h поэтому он знает, что это такое:
// Game.h
#include "Deck.h"
class Game {
private:
Deck _deck;
}
Хорошо, то отлично. Но теперь мне нужно использовать _deck в Game.cpp
// Game.cpp
#include "Game.h"
Deck Game::_deck;
void Shuffle(void)
{
_deck = Deck();
_deck.Shuffle();
}
Но я получаю сообщение об ошибке, что «Колода не определено». Но поскольку Game.cpp включает Game.h, если Game.h включает Deck.h?
Если добавить к deck.h Game.cpp я получаю:
"Uses undefinied class Deck Game.cpp"
и
"Deck class redeclaration Deck.h"
Я не понимаю, это вообще ...
'# include' просто копирует и вставляет содержимое файла в текущий файл перед отправкой его в компилятор. –
Будьте внимательны, чтобы не устанавливать взаимное включение между вашими заголовками. Разрыв зависимости с форвардными объявлениями. Возможно, [* this Q & A *] (http://stackoverflow.com/questions/14909997/why-arent-my-include-guards-preventing-recursive-inclusion-and-multiple-symbol/14909999#14909999) может помочь. –