Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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++_Derived Class_Base Class - Fatal编程技术网

C++ 我可以调用派生类';基类中的s函数?

C++ 我可以调用派生类';基类中的s函数?,c++,derived-class,base-class,C++,Derived Class,Base Class,我在派生类中有一个函数d(),它将在基类函数b()中调用。我试图通过在基类中创建一个具有相同名称的虚拟函数来实现这一点(以满足编译器和强制后期绑定)。 我将始终使用派生类的对象调用b()。但问题是编译进展顺利,但链接器返回了一个错误: undefined symbol <baseclass_name>::d in module main.cpp 模块main.cpp中未定义的符号::d 奇怪的是,在main.cpp中甚至没有调用d()。它在另一个文件中定义和调用 我被困在这

我在派生类中有一个函数d(),它将在基类函数b()中调用。我试图通过在基类中创建一个具有相同名称的虚拟函数来实现这一点(以满足编译器和强制后期绑定)。 我将始终使用派生类的对象调用b()。但问题是编译进展顺利,但链接器返回了一个错误:

undefined symbol <baseclass_name>::d in module main.cpp   
模块main.cpp中未定义的符号::d 奇怪的是,在main.cpp中甚至没有调用d()。它在另一个文件中定义和调用

我被困在这里了。有人能给出任何可能的解释或建议更好的方法吗


(我需要从基类中调用d(),否则会使我的代码更加庞大……

您需要实现基类版本,或者在基类中声明它为纯虚拟的(或两者都是),这取决于基类实现它是否有意义。所有非纯虚函数都必须实现,这可能就是您出现错误的原因。

模板方法模式可以帮助您在基类上声明纯虚函数,并在派生类上实现它。在基类上使用函数,

我认为你的问题可能不是C++而是链接。如果将
d()
放在另一个cpp文件中,则必须编译并将这些文件链接在一起。例如:

g++ main.cpp a.cpp b.cpp -o test
这将编译三个.cpp文件,并将它们链接到名为“test”的可执行文件中


如果您使用的是IDE,则可能需要创建一个项目并向其中添加所有必需的cpp文件。构建时,项目中的所有文件都将用于构建可执行文件。

请显示您的代码。一些示例代码可能不错,但听起来您想使用
CRTP
是否将d()设为纯虚拟
virtual void d()=0在基类中?听起来您只需要完全重新编译<在任何构造基本对象或派生对象的模块中都需要code>Base::d