我可以在基类中调用派生类的函数吗?

时间:2013-12-06 16:19:35

标签: c++ derived-class base-class

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

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

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

(我需要从基类调用d(),否则会使我的代码更笨重......)

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

g++ main.cpp a.cpp b.cpp -o test

这将编译三个.cpp文件并将它们链接到名为'test'的可执行文件中。

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