解析c ++头文件中的循环引用

时间:2016-12-02 03:54:43

标签: c++

我遇到一个循环包含引用错误,我希望在CardFactory中使用Deck类型的对象,以及在Deck中使用CardFactory类型的对象。关于如何解决这个问题的任何提示?

//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

1 个答案:

答案 0 :(得分:2)

转发参考(或转发声明)。

Deck.h中,您不需要#include "CardFactory.h",而只是宣布该课程。

class CardFactory;

这应该有效,因为在Deck类中,您只使用指向类CardFactory的指针