【问题标题】:C++: Cannot initialize a variable of type 'guiBaseObject *' with an rvalue of type 'void'C++:无法使用“void”类型的右值初始化“guiBaseObject *”类型的变量
【发布时间】:2015-04-15 11:54:53
【问题描述】:

我正在使用开放框架。这是基于 C++ 的。

我有以下代码:

guiBaseObject *item = panel.addSlider("motor_speed", 0, 0, 100);

我无法理解为什么会收到以下错误。

/Users/CREATER/Documents/of_v0.8.4_osx_release/apps/myApps/MapamokStepper/src/MotorControl.cpp:38:20: Cannot initialize a variable of type 'guiBaseObject *' with an rvalue of type 'void'

【问题讨论】:

  • addSlider 可能会返回 void,因此您不能从中返回 guiBaseObject*
  • addSlider()的返回类型是什么?
  • 我在他们的文档中没有看到addSlider,但我认为它会返回void

标签: c++ initialization void openframeworks rvalue


【解决方案1】:

如果您想访问滑块,可以执行以下操作:

ofIntSlider motorSpeed;
panel.add(motorSpeed.setup("motor_speed", 0, 0, 100));

【讨论】:

    【解决方案2】:

    C++ 是一种强类型语言。您确实需要将右值类型转换为左值。 在你的情况下,它应该是这样的:

    guiBaseObject *item = (guiBaseObject *)panel.addSlider("motor_speed", 0, 0, 100);
    

    否则会出现编译错误。

    【讨论】:

    • 不完全是最佳实践。
    • 你不能将void 投射到任何东西上,因为它什么都不是。
    • 它是一种(中等)强类型语言,因此您需要声明正确类型的变量,而不是使用强制类型转换来强制通过编译器生成无效代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多