2017-02-15 9 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

왜'Rule'는'Category'에서 상속이 있지 확인? 'Category'에는'Rule'을 포함하지 않는'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 
관련 문제