构造函数正在调用一个使用当前类类型的函数
Constructor is calling a function which is using the current class type
NavCal(int in){ read(in, *this) } //constructor for NavCal class
构造函数主体中函数void read(int, &Navcal)
的第二个参数是对NavCal
类型对象的引用。
当构造函数的定义在NavCal
类之外并且物理上在read
函数之下时,没有问题。但目前我必须在NavCal
类中定义构造函数。当在NavCal
类之上正向声明read
函数时,编译器在看到正向声明时不会理解什么是NavCal
类。
Q: 如何解决这个坏循环,同时将构造函数的定义保留在类中?
请解决下方的代码狙击
#include <iostream>
std::istream &read(std::istream&, NavCal&);
struct NavCal {
NavCal() = default;
NavCal(std::istream &is)
{
read(is, *this);
}
int getPr() const { return pr; };
int pr;
};
// nonmember functions
std::istream &read(std::istream &is, NavCal& navCal_1)
{
is >> navCal_1.pr;
return is;
}
当正向声明NavCal类上方的读取函数时,编译器在看到正向声明时不会理解什么是NavCal类别。
所以转发声明NavCal
!
struct NavCal;
void read(int, NavCal&);
struct NavCal
{
NavCal() { read(42, *this); }
};
这正是前瞻性声明的真正目的。宣布一个函数只是照常工作。
你说得对,另一种可能性,也是我仍然会考虑的可能性,是将声明与定义分开:
// NavCal.h
struct NavCal
{
NavCal();
};
// MyReadingStuff.h
#include "NavCal.h"
void read(int, NavCal&);
// NavCal.cpp
#include "NavCal.h"
NavCal::NavCal()
{
read(42, *this);
}
…但这并不总是方便/后勤/可能的。
事实上,即使在最后一个例子中,我也可能只是在MyReadingStuff.h
中转发声明NavCal
,以保存不必要的include(然后传播!(。所以这有点没有意义。:(
相关文章:
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- C++ 这里有一个返回 (24) 的布尔返回类型函数
- 使用SFINAE来检测void返回类型函数的存在
- 使用此类型函数有什么优势
- 为什么此函数通过类型函数指针调用后,呼叫明智地行为
- 如何使用无类型函数指针调用C++成员函数
- 模板返回类型函数如何在C++中工作
- 具有通用类型函数的动态库[C ]
- 如何在返回类型函数模板的专用化中使用派生类型?( "couldn't infer template argument" )
- Bon appetit :从 int 返回类型函数在 main() 中打印字符串
- 对于需要其他模板参数的类型函数的部分模板专业化
- c++错误的参数类型-函数指针
- 延迟评估模板类型函数
- 在引用或指针返回类型函数上输入
- 具有指针数据类型的非类型函数模板参数
- STL中使用的C++自定义比较类型(函数谓词与较少结构)
- C++模板基类的非类型函数模板的 using 声明
- 字符串到类型函数,模板专用化使调用统一
- 自由类型函数可以接受 Unicode 文件名吗?