gpt4 book ai didi

C++ 类方法,返回 vector

转载 作者:行者123 更新时间:2023-11-30 00:39:55 24 4
gpt4 key购买 nike

我在尝试为类编写方法时遇到了一些麻烦。我有类符号和类终端。类终端扩展类符号,但类符号的方法之一需要返回一个 vector 。例如:

#ifndef SYMBOL_H
#define SYMBOL_H

#include "terminal.h"
#include <vector>

using namespace std;

class symbol {
public:
vector<terminal> first();
virtual void polymorphable();
};

#endif

定义类终端:

#ifndef TERMINAL_H
#define TERMINAL_H

#include "symbol.h"

using namespace std;

class terminal: public symbol {
// ...
};

#endif

但是,在执行此操作时,我在构建时遇到了两个错误,一个或另一个首先出现:定义 vector 函数的行上的“'terminal':未声明的标识符”,以及“'symbol':基类未定义"与终端类定义一致。

如何解决“a 需要 b”、“b 需要 a”的问题?

最佳答案

使用 Forward Declarations 避免循环依赖.

class terminal;

class symbol
{
std::vector<terminal> first();
// ...
};

根据 C++ 标准,有人推测这种方法是未定义的。
@Ben Voight 指出:

C++03 标准第 17.6.4.8 节说:

"In particular, the effects are undefined in the following cases: ... if an incomplete type is used as a template argument when instantiating a template component, unless specifically allowed for that component...

是否std::vector<X> f();std::vector<X>实例化,正在讨论中 here 。如果那里的答案证明是,那么这个答案就不成立了,我会删除它,否则它仍然有效。

关于C++ 类方法,返回 vector<subclass>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7730211/

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