C++ C++;:无法初始化类型为';guiBaseObject*';具有类型为';无效';

C++ C++;:无法初始化类型为';guiBaseObject*';具有类型为';无效';,c++,initialization,void,openframeworks,rvalue,C++,Initialization,Void,Openframeworks,Rvalue,我正在使用openframeworks。这是基于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 variabl

我正在使用openframeworks。这是基于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'

C++是一种强类型语言。您确实需要将右值转换为左值。 在您的案例中,应该是这样的:

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

否则会出现编译时错误。

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

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

addSlider
可能返回
void
,因此您无法从中返回
guiBaseObject*
addSlider()
的返回类型是什么?我在他们的文档中没有看到,但我假设它返回
void
。这不完全是最佳做法。您不能将
void
转换为任何内容,因为它什么都不是。它是一种(中等)强类型语言,所以您需要声明正确类型的变量,而不是使用强制转换来强制编译器执行无效代码。