2017-02-15 25 views
0

後に宣言されている間は、私は、コマンドstd::vector<Rule> setOfRules;Ruleがまだ宣言されていなかったというエラーを与えているヘッダファイル利用派生クラス派生クラスは、基本クラス

#ifndef CATEGORY_H 
#define CATEGORY_H 

#include <functional> 
#include <string> 
#include <vector> 

class Category 
{ 
    private: 
     std::string nameCategory; 
     std::vector<Rule> setOfRules; 
    protected: 
    public: 
     Category(); 
     Category(std::string nameCategory); 
     void setIndexBankAccountEntry(unsigned int iBankAccountEntry); 
}; 

class Rule : public Category 
{ 
    private: 
     std::function<void(int)> rule; 
    protected: 
    public: 
     Rule(); 
     Rule(std::function<void(int)> rule); 
}; 
#endif 

を持っています。二つのクラスの宣言の順序を切り替える

#ifndef CATEGORY_H 
#define CATEGORY_H 

#include <functional> 
#include <string> 
#include <vector> 

class Rule : public Category 
{ 
    private: 
     std::function<void(int)> rule; 
    protected: 
    public: 
     Rule(); 
     Rule(std::function<void(int)> rule); 
}; 

class Category 
{ 
    private: 
     std::string nameCategory; 
     std::vector<Rule> setOfRules; 
    protected: 
    public: 
     Category(); 
     Category(std::string nameCategory); 
     void setIndexBankAccountEntry(unsigned int iBankAccountEntry); 
}; 
#endif 

を与えますが、その後、私はラインclass Rule : public Categoryためexpected class-name before ‘{’ tokenというエラーが出ます。

どうすれば解決できますか?

+1

はなぜ '' Category'から継承する必要がありRule'ん? 'Category'に' Rule'が含まれているという継目は 'Rule'を派生したクラスにする必要があります。 – NathanOliver

+0

以下の回答を参照してください。フォワード宣言では、「これと呼ばれるクラスがありますが、今はそれが何であるか心配しないでください」と述べています。これにより、ポインタを宣言することができますが、それはすべてです。正しく宣言されるまで、クラス内の何も参照することはできません。 – Mike

答えて

2

あなたはクラスRuleための前方宣言を使用することができます(最初の例に基づいて)。

class Rule; 
class Category 
{ 
    private: 
     std::string nameCategory; 
     std::vector<Rule> setOfRules; 
    protected: 
    public: 
     Category(); 
     Category(std::string nameCategory); 
     void setIndexBankAccountEntry(unsigned int iBankAccountEntry); 
}; 
// class Rule definition here 

チェックhere

0

あなたは前方クラスルールを宣言することができます。

#ifndef CATEGORY_H 
#define CATEGORY_H 

#include <functional> 
#include <string> 
#include <vector> 

class Rule; // <-- here 

class Category 
{ 
    private: 
     std::string nameCategory; 
     std::vector<Rule> setOfRules; 
    protected: 
    public: 
     Category(); 
     Category(std::string nameCategory); 
     void setIndexBankAccountEntry(unsigned int iBankAccountEntry); 
}; 

class Rule : public Category 
{ 
    private: 
     std::function<void(int)> rule; 
    protected: 
    public: 
     Rule(); 
     Rule(std::function<void(int)> rule); 
}; 
#endif 
関連する問題