Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 两个相互返回的派生类';s型输入法_C++_Inheritance_Types - Fatal编程技术网

C++ 两个相互返回的派生类';s型输入法

C++ 两个相互返回的派生类';s型输入法,c++,inheritance,types,C++,Inheritance,Types,我遇到了类似的情况: 水电站 D1.1水电站 class D1 : B { D2 conversion_method(){ D2 d2(); ... return d2; }; } D2.1水电站 class D2 : B { D1 conversion_method(){ D1 d1(); ... return d1; }; } 所以这些类需要知道彼此的定义才能返回正确的类型,我该如何处理这类问题?我需要这些方法来返回类型(而不是指针),因为这是接口要求。这可以做到,但内联

我遇到了类似的情况:

水电站

D1.1水电站

class D1 : B {
    D2 conversion_method(){ D2 d2(); ... return d2; };
}
D2.1水电站

class D2 : B {
    D1 conversion_method(){ D1 d1(); ... return d1; };
}

所以这些类需要知道彼此的定义才能返回正确的类型,我该如何处理这类问题?我需要这些方法来返回类型(而不是指针),因为这是接口要求。

这可以做到,但内联函数声明不行

两个类都需要在它们的头文件中相互转发声明,即:

class D2;

class D1 : B {
    D2 conversion_method();
}

然后,在某个地方,在某些第三个头文件或某些必须包含两个头文件的
.cpp
文件中,您可以定义这两个
转换方法,因为这两个类的定义现在都可用


通过巧妙地使用额外的
#include
和预处理器宏处理,可以安排一些事情,一旦两个头文件都得到
#include
d,就会自动定义
转换方法的两个实现。这是通过让每个头文件定义一些东西,然后包含第三个头文件来实现的。第三个头文件检查两个
#define
s是否存在,并继续定义两个
转换方法
()。这实际上完成了与您最初意图相同的事情。

这可以做到,但内联函数声明不能做到

两个类都需要在它们的头文件中相互转发声明,即:

class D2;

class D1 : B {
    D2 conversion_method();
}

然后,在某个地方,在某些第三个头文件或某些必须包含两个头文件的
.cpp
文件中,您可以定义这两个
转换方法,因为这两个类的定义现在都可用


通过巧妙地使用额外的
#include
和预处理器宏处理,可以安排一些事情,一旦两个头文件都得到
#include
d,就会自动定义
转换方法的两个实现。这是通过让每个头文件定义一些东西,然后包含第三个头文件来实现的。第三个头文件检查两个
#define
s是否存在,并继续定义两个
转换方法
()。这有效地完成了与您最初意图相同的事情。

使用前向声明和指针或引用。使用前向声明和指针或引用。用于定义方法的单独的.cpp文件似乎很有用:)谢谢!用于定义方法的单独的.cpp文件似乎工作得很好:)谢谢!
class D1;

class D2 : B {
    D1 conversion_method();
}