【问题标题】:Pure virtual method returning an object?纯虚方法返回一个对象?
【发布时间】:2013-03-31 16:43:46
【问题描述】:

我正在尝试做这个纯虚方法:

   virtual MonLaser& getLaser() = 0;

但是我得到了各种各样的错误:

Error 6 error C2143: syntax error : missing ';' before '&'
Error 5 error C2253: 'MonMartien::getLaser' :
  pure specifier or abstract override specifier only allowed on virtual function
Error 13 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

Error 7 error C2433: 'MonMartien::MonLaser' : 'virtual' not permitted on data declarations

我需要做一个纯虚方法,否则我无法访问我的Laser。你有什么想法吗?

【问题讨论】:

  • 问我一个愚蠢的问题,MonLaser 是对象的类型吗?如果是这样,请尝试返回 pointer 而不是 reference
  • 尝试包含一个最小的、完整的示例来演示问题。
  • 是的,MonLaser 是 MonMartien 的一个对象。我会试试看,但为什么会成功?
  • 等等...我犯了一个错误。说,MonLaser 是在哪里定义的?我的意思是类/结构,不管怎样?
  • 它在 MartienJiggle 中定义,它是 MonMartien 的一个子类。

标签: c++


【解决方案1】:

在得知该方法从 MonMartien 类中返回自定义类型之后,我现在有了不同的理论。

您会看到,此错误消息表明编译时类型未知。确保在声明 MonMartien 之前声明 MonLaser。如果两者都在同一个标​​题中,请确保将MonLaser 的声明放在MonMartien 的声明之上。如果在单独的文件中,请务必包含头文件。

另外,请确保声明不在类内,因为这样该类型将不可见,因此类外的任何人都无法访问。

本质上,这一切都归结为:MonLaser 定义在哪里?

【讨论】:

  • @Tomek 同意,我刚刚注意到我的思考过程中有一个错误。
  • 不不! MonLaser 在 MartienJiggle 中,它是 MonMartien 的一个子类。
  • @Maxwell 尝试将MonLaser 的声明放入全局范围。甚至可能是一个单独的文件,它包含在 MartienJiggleMonMartien 中。
猜你喜欢
  • 1970-01-01
  • 2017-03-19
  • 2011-09-28
  • 2018-09-18
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
相关资源
最近更新 更多