後に宣言されている間は、私は、コマンド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
というエラーが出ます。
どうすれば解決できますか?
はなぜ '' Category'から継承する必要がありRule'ん? 'Category'に' Rule'が含まれているという継目は 'Rule'を派生したクラスにする必要があります。 – NathanOliver
以下の回答を参照してください。フォワード宣言では、「これと呼ばれるクラスがありますが、今はそれが何であるか心配しないでください」と述べています。これにより、ポインタを宣言することができますが、それはすべてです。正しく宣言されるまで、クラス内の何も参照することはできません。 – Mike