【发布时间】:2018-02-21 10:15:27
【问题描述】:
我在覆盖某个函数时遇到了一些问题,我不知道为什么它不起作用。我一直在网上寻找,但我没有找到任何东西。我可能应该补充一点,我现在正在使用 c++11 标准,以防万一。这是我的代码:
class SupervisedLearner {
public:
...
virtual double measureAccuracy(Matrix& features, Matrix& labels, Matrix* pOutStats = NULL);
}
class NeuralNet: public SupervisedLearner {
public:
...
double measureAccuracy(Matrix& features, Matrix& labels, Matrix* pOutStats = NULL) override;
}
然后通过指向通用 SupervisedLearner 类的指针调用方法 measureAccuracy:
SupervisedLearner* learner = getLearner(model, r, parser.getLearnerExtra());
...
double accuracy = learner->measureAccuracy(trainFeatures, trainLabels, &stats);
请注意,基类和子类都有该方法的实现。出于某种原因,该程序总是转到 SupervisedLearner::measureAccuracy 函数。
谁能看出明显的错误?
【问题讨论】:
-
只是一个建议:如果您在派生类中覆盖虚函数,请使用
override。 -
getLearner() 实例化了什么?
-
我还应该补充一点,我曾尝试将“学习者”显式转换为 NeuralNet*,但没有成功。
-
可能性(1)
getLearner实际上没有返回指向NeuralNet的指针。测试dynamic_cast<NeuralNet*>(learner) == nullptr。方法名称之一中的可能性 (2) 拼写错误导致派生类的方法实际上不是覆盖。 -
@ScottCrunketon 确保矩阵类型相同。确保将这两个类放在同一个文件中。还要确保您没有意外从其他 SupervisedLearner 类派生...
标签: c++ c++11 polymorphism overriding