[英]nested class as a parameter for the member function in C++
我正在集成某人的代码,该代码在一个cpp文件中包含所有内容。 主要代码如下:
class Outer
{
public:
struct Inner
{
struct In_inner
{
...
}
}
int func(Inner& inn, Inner::In_inner& in_inn)
{
...
}
}
要进行分隔,是否应为“内部”参数添加“外部::”,如下所示?
在头文件中
class Outer
{
public:
struct Inner
{
struct In_inner
{
...
}
}
int func(Inner& inn, Inner::In_inner& in_inn);
}
并在cpp文件中:
int Outer::func(Outer::Inner& inn, Outer::Inner::In_inner& in_inn)
{
...
}
参数列表与声明有点不同,这听起来有点奇怪。 另外,我可以再次将所有内容保留在同一文件中,并将其作为头文件包含吗?
感谢您的任何评论!
int Outer::func(Outer::Inner& inn, Outer::Inner::In_inner& in_inn)
是。 您已经正确编写了此代码。 如果要在类外定义,则必须添加Outer::
。
参数列表与声明有点不同,这听起来有点奇怪
没关系。 该函数在类外部定义。 您不再属于此类。 因此,它看起来有些不同。
但是,如果您不想让它看起来有所不同,那么您也可以在声明中编写Outer::
,如下所示:
class Outer
{
public:
//...
int func(Outer::Inner& inn, Outer::Inner::In_inner& in_inn);
};
这很好,并且可以工作,因为Outer
是一个注入名称,它在类中也可用。
struct A
{
struct B {
struct C {};
};
B b1; //okay - as usual
A::B b2; //this is also okay - not so usual though
B::C c1; //okay - as usual
A::B::C c2; //this is also okay - not so usual though
A::A::A::A::A::A *pA; //this is very very unsual. But it is also okay!
};
最后一行是可以的,因为名称A
被注入到类A
的定义中。 因此,它变得递归可用。
看到它编译良好:
参数列表没有不同; 类型是相同的。 在头文件中具有明确限定的std::
成员并使用using namespace std;
使用并不少见using namespace std;
在源文件中。 基本上是同一回事。
只要它们引用相同的类型,如何限定类型就无关紧要。 并且由于您不在源文件的“ Outer
”范围内,因此在此处必须有明确的限定条件。
在类声明/定义中,您位于范围Outer ::中。 除此之外(在您的.cpp中),您不是。 是的,您可以将函数定义保留在标题中:这是一个隐式内联。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.