我有一个抽象类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
”(取决于上下文)。
我猜是:
我已经看过代码并加注星标,但我看不到这两种情况。但是,我怀疑我只是错过了一些东西。现在,我可以在此处发布所有代码,并请其他人凝视它并找到问题所在。这就是这里发生的情况:C++ why is my class still abstract?即,该代码几乎是正确的,只是缺少了一个细小的“&”号,从而导致类型签名不同,从而导致错误。但是我真的不想发布我的代码,因为它很长,是模板化的,不是自包含的,并且与实际问题无关。
相反,我想要一种解决此问题的通用解决方案/工具。编译器自动告诉我哪个导致问题的原因应该很容易(即,抽象基类的哪个方法未在D
中覆盖)。 g ++是否有可以帮助我的标志?另一个工具?另一个主意?我宁愿不从g ++ 4.9升级(因为该项目将需要大量的工作),但我愿意在这种情况下为我提供更好的错误消息。
答案 0 :(得分:0)
真正的解决方案似乎是升级到最新的g ++,以获得真正的错误消息。
一种最佳实践和有用的技术是添加重写注释,以帮助识别类型签名不正确的任何方法。