它的前向声明是c++程序中唯一的选项
Is forward declaration is the only option in the C++ program?
c++是否有其他替代的前向声明?例如,我有一个类B,它使用类a。
class B
{
public:
void set_classA_val( A &b);
};
class A
{
private:
int example;
};
除了将类A置于类B之上之外,是否有其他方法可以解决此编译问题?我们还有别的选择吗?向前申报是唯一的解决方案吗?
是,
如果你不想把A放在B之前,那么在这种情况下,前向声明是唯一的解决方案(如果你不想改变B的定义-参见Zac Howland回答其他改变B的想法)。这没有什么错。不知何故,来自B的方法需要知道A是什么(在这种情况下,它是一个类)。要么,编译器会找到一个定义,要么你会帮助编译器向前声明。
任何名称在使用前都必须声明。如果您不喜欢下面的代码
class A;
class B
{
public:
void set_classA_val( A &b);
};
则可以在成员函数set_classA_val
的参数声明中使用详细的类型名称class B
{
public:
void set_classA_val( class A &b);
};
有一些选择,但是如果没有更多关于你的目标的信息,很难告诉你哪个是最好的。前向声明、移动A
的定义以及使B
成为模板类是一些选项。假设您熟悉前者,后者看起来像:
template<typename T>
class B
{
public:
set_value(T& t);
};
你可以使用:
B<A> ba;
正如jrok所提到的,你也可以使函数本身成为一个模板——但使用将取决于B
如何使用该参数(例如,如果其他函数也需要该类型,则可能最好让整个类都使用它)。
相关文章:
- 如何在提升程序选项中设置矢量<矢量>的默认值<string>
- C++ 使用 json 文件提升程序选项
- 提升程序选项:链接错误
- 提升程序选项的多个选项值
- 在任务管理器的应用程序选项卡中获取运行任务的列表
- 获取提升程序选项以在函数范围之后保留
- boost::any_cast 使用程序选项 C++ 抛出
- clang-format用于提升程序选项
- 提升程序选项:参数被多次检测到
- 提升程序选项:自定义验证器是否需要重载运算符>>?
- C ++提升程序选项始终给出默认值
- 使用提升程序选项通过配置文件/命令行解析自定义对象
- 将参数从升压程序选项导出到doxygen
- 使用Boost程序选项读取相对文件路径
- 使用提升程序选项处理 2 级命令的最佳方法
- 如何使用Boost程序选项提取已解析选项的序列
- 提升程序选项对价值
- 在程序选项中添加键值对
- 提升程序选项 添加选项语法
- 提升 1.57.0 程序选项 MSVS 2013 链接器错误