加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C使用另一个类的方法声明

发布时间:2020-12-16 09:42:14 所属栏目:百科 来源:网络整理
导读:我开始学习C(来自 Java),所以请耐心等待. 我似乎无法接受我的方法声明来接受我所制作的课程. ‘Context’ has not been declared 我想我不理解一个基本概念,但我不知道是什么. Expression.h #include "Context.h" class Expression { public: void interpret
我开始学习C(来自 Java),所以请耐心等待.

我似乎无法接受我的方法声明来接受我所制作的课程.

‘Context’ has not been declared

我想我不理解一个基本概念,但我不知道是什么.

Expression.h

#include "Context.h"  
class Expression {  
public:  
    void interpret(Context *);  // This line has the error
    Expression();  
    virtual ~Expression();  
};

Context.h

#include <stack>  
#include <vector>  
#include "Expression.h"  

class Context {  
private:  
    std::stack<Expression*,std::vector<Expression*> > theStack;  
public:  
    Context();  
    virtual ~Context();  
};

解决方法

您必须在Context中转发声明Expression,反之亦然(或两者),否则您将具有循环依赖.例如,

Expression.h:

class Context; // no include,we only have Context*.

class Expression {  
public:  
    void interpret(Context *);  // This line has the error
    Expression();  
    virtual ~Expression();  
};

Context.h:

#include <stack>  
#include <vector>  

class Expression; // No include,we only have Expression*

class Context {  
private:  
    std::stack<Expression*,std::vector<Expression*> > theStack;  
public:  
    Context();  
    virtual ~Context();  
};

您可以执行前向声明,因为不需要完整的类定义,因为在每种情况下您只是指向其他类的指针.您可能需要实现文件中的包含(即Expression.cpp中的#include“Context.h”和Context.cpp中的#include Expression.h).

最后,记得将include guards放入头文件中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读