是否可以在基类中调用派生类的函数?
Can I call a derived class's function in base class?
我在派生类中有一个函数d(),它将在基类函数b()中调用。我试图通过在基类中创建一个同名的虚拟函数来实现这一点(以满足编译器的要求并强制执行后期绑定)。我将始终使用派生类的对象来调用b()。但问题是编译进行得很好,但链接器返回了一个错误:
undefined symbol <baseclass_name>::d in module main.cpp
奇怪的是,d()甚至没有在main.cpp中调用。它是在另一个文件中定义和调用的。
我被困在这里了。有人能给出任何可能的解释或提出更好的方法吗?
(我需要从基类调用d(),否则会使我的代码变得更加庞大…)
您需要实现基类版本,或者在基类中声明它为纯虚拟(或两者兼有),这取决于基类实现它是否有意义。所有非纯虚拟函数都必须实现,这可能就是您出现此错误的原因。
模板方法模式可以帮助您在基类上声明函数纯虚拟,并在派生类上实现它。并在基类上正常使用该函数。
我认为您的问题可能不是C++,而是链接。如果将d()
放在另一个cpp文件中,则必须编译并将这些文件链接在一起。例如:
g++ main.cpp a.cpp b.cpp -o test
这将编译三个.cpp文件,并将它们链接到名为"test"的可执行文件中。
如果你使用的是IDE,你可能需要创建一个项目,并将所有必需的cpp文件添加到其中。当你构建时,项目中的所有文件都将用于构建你的可执行文件。
相关文章:
- 在派生函数中指定void*参数
- 使用 std::variant<...时调用 BaseState 函数而不是派生函数>
- 从基类数组调用派生函数
- 我设计了一个类并创建了基指针,但是当我尝试通过基指针访问派生函数时,它会出错
- c++ 在派生函数中启动 OMP 线程
- 派生函数的映射
- NIST SP 800-56A 串联/单步密钥派生函数的现有实现
- C++从基类实例调用派生函数
- c++多态性-使用基指针访问派生函数
- 派生函数中的NULL实现
- 与派生函数参数绑定
- 从基类派生函数
- 继承和使用派生函数
- 在列表对象中使用对象的派生函数
- 当派生函数定义了析构函数时,使用复制函数而不是移动函数
- 使用基类的派生函数
- 为什么调用基类函数而不是派生函数
- 多重继承派生类:如何在不重复调用 base 的情况下重用派生函数
- 试图与 Base 中的派生函数交朋友 - 为什么它不起作用?
- 在继续派生函数之前先执行基函数