我在派生类中有一个函数d(),它将在基类函数b()中调用。我尝试通过在基类中创建具有相同名称的虚函数来实现此目的(以满足编译器并强制执行后期绑定)。 我将始终使用派生类的对象调用b()。但问题是编译顺利,但链接器返回错误:
undefined symbol <baseclass_name>::d in module main.cpp
奇怪的是,在main.cpp中甚至没有调用d()。它在另一个文件中定义和调用。
我被困在这里。任何人都可以给出任何可能的解释或建议更好的方法吗?
(我需要从基类调用d(),否则会使我的代码更笨重......)
答案 0 :(得分:1)
您需要实现基类版本,或者在基类(或两者)中声明它是纯虚拟的,具体取决于基类是否有意义实现它。必须实现所有非纯虚函数,这可能是你得到错误的原因。
答案 1 :(得分:0)
模板方法模式可以帮助您,在基类上声明纯虚函数并在派生类上实现它。并且在基类上正常使用该函数。
答案 2 :(得分:0)
我认为你的问题可能不是C ++而是联系。如果将d()
放在另一个cpp文件中,则必须编译并将这些文件链接在一起。例如:
g++ main.cpp a.cpp b.cpp -o test
这将编译三个.cpp文件并将它们链接到名为'test'的可执行文件中。
如果您使用的是IDE,则可能需要创建一个项目并向其中添加所有必需的cpp文件。当您构建项目中的所有文件时,将用于构建您的可执行文件。