gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:15:02 25 4
gpt4 key购买 nike

我正开始学习 C++(来自 Java),请多多包涵。

我似乎无法让我的方法声明接受我创建的类。

'Context' has not been declared

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

表达式.h

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

上下文.h

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

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

最佳答案

您必须在 Context 中转发声明 Expression,反之亦然(或两者),否则您会产生循环依赖。例如,

表达式.h:

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

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

上下文.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"#include Expression. hContext.cpp 中)。

最后记得放include guards在你的头文件中。

关于使用另一个类的 C++ 方法声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14571573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com