2016-12-02 3 views
0

Я встречаю круговую ошибку ссылки, в которой я хочу использовать объект типа Deck в CardFactory, и объект типа CardFactory в палубе. Любые подсказки относительно того, как исправить эту проблему?Разрешение круговой ссылки в заголовочных файлах C++

//CardFactory.h 
#ifndef CARDFACTORY_H 
#define CARDFACTORY_H 

#include "Deck.h" 

#include <string> 

using std::string; 

class CardFactory { 

public: 
    Deck getDeck(); 
    static CardFactory* getFactory() { 
     static CardFactory singleton; 
     return &singleton; 
    } 

}; 

#endif 

//Deck.h 
#ifndef DECK_H 
#define DECK_H 

#include <vector> 
#include <iostream> 
#include "CardFactory.h" 
using std::ostream; 

class Deck : public std::vector<Card*> { 
    friend ostream& operator<<(ostream& os, const Deck& dt); 
    Card* draw(); 
    Deck(CardFactory* cf); 
}; 

#endif 
+0

Вы не должны наследовать от вектора и других STL контейнеров. –

ответ

2

Переслать ссылку (или декларацию вперед).

В Deck.h вам не нужно указывать #include "CardFactory.h", а просто объявлять класс.

class CardFactory; 

Это должно работать, потому что в Deck классе вы только с помощью указателя на класс CardFactory

+0

Также называется «форвардная декларация» –

+0

@MichaelAlbers это правда – artm

Смежные вопросы