解决“无效的抽象返回类型”

时间:2018-07-12 05:30:59

标签: c++ g++

我有一个抽象类int64_t,它带有大约20个纯虚函数,以及子类std::cout << static_cast<int64_t>(std::pow(2, 32)) << "\n"; // prints 4294967296 A,它们实现了所有这些虚函数。他们的工作很棒。

我刚刚写了另一个非抽象类B,它也是C的子类。我思想我为D内部的所有纯函数提供了一种实现,但是当我尝试实例化类g ++ 4.9.2时,给出了错误“无法声明变量A”是抽象类型D”或“无效的抽象返回类型d”(取决于上下文)。

我猜是:

  1. 我忘记了其中一种方法
  2. 其中一种方法的类型签名错误。

我已经看过代码并加注星标,但我看不到这两种情况。但是,我怀疑我只是错过了一些东西。现在,我可以在此处发布所有代码,并请其他人凝视它并找到问题所在。这就是这里发生的情况:C++ why is my class still abstract?即,该代码几乎是正确的,只是缺少了一个细小的“&”号,从而导致类型签名不同,从而导致错误。但是我真的不想发布我的代码,因为它很长,是模板化的,不是自包含的,并且与实际问题无关。

相反,我想要一种解决此问题的通用解决方案/工具。编译器自动告诉我哪个导致问题的原因应该很容易(即,抽象基类的哪个方法未在D中覆盖)。 g ++是否有可以帮助我的标志?另一个工具?另一个主意?我宁愿不从g ++ 4.9升级(因为该项目将需要大量的工作),但我愿意在这种情况下为我提供更好的错误消息。

1 个答案:

答案 0 :(得分:0)

真正的解决方案似乎是升级到最新的g ++,以获得真正的错误消息。

一种最佳实践和有用的技术是添加重写注释,以帮助识别类型签名不正确的任何方法。