//node.h
class node
{
public:
void sort(node n);
};
Run Code Online (Sandbox Code Playgroud)
我还没有尝试过代码.但有趣的是,这是一个有效的案例,为什么?
编辑:
这引出了另一个问题:我可以在这样的成员函数中声明FOO吗?
//FOO.h
Class FOO
{
public:
void sort(int n) ;
void swap(int x , int y );
}
//FOO.cpp
void FOO::sort (int n)
{
FOO obj;
obj.swap(3 , 5) ;
}
Run Code Online (Sandbox Code Playgroud)
是的,这完全有效.如果你不能这样做,你怎么能写复制构造函数?
类似但无效的情况包括与类/结构的成员相同的类型.
struct Foo
{
Foo m_foo;
};
Run Code Online (Sandbox Code Playgroud)
你不能这样做,因为它基本上是一个循环定义,如果你有:
struct Foo
{
Foo m_foo;
Foo m_bar;
};
Run Code Online (Sandbox Code Playgroud)
然后一个Foo将是2个Foos,这将是4个Foos,这将是8个Foos等,这没有任何意义.
另一方面,您可以指向相同类型的指针:
struct Foo
{
Foo* m_foo;
};
Run Code Online (Sandbox Code Playgroud)
因为指向Foo的指针与Foo不同.无论指向什么指针,指针都是指针,因此没有循环定义或依赖关系.