【发布时间】:2017-07-04 04:09:36
【问题描述】:
我有头文件
#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
其中std::vector<Rule> setOfRules; 命令给出了Rule 尚未声明的错误。
切换两个类的声明顺序给了
#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
但后来我收到expected class-name before ‘{’ token 的错误class Rule : public Category。
我该如何解决这个问题?
【问题讨论】:
-
为什么
Rule必须继承自Category?Categorys 包含Rules 的接缝并不意味着Rule必须是派生类。 -
查看下面的答案。前向声明的意思是“会有一个名为 this 的类,但现在不用担心它是什么。”这允许您声明指向它的指针,但仅此而已 - 在正确声明之前,您不能引用类中的任何内容。
标签: c++ derived-class