C 铸造空心*至其他类型

C 铸造空心*至其他类型,c,casting,C,Casting,我得到了一个错误: error: 'void*' is not a pointer-to-object type 对于以下代码: Button config_b1 = Button("b1"); Button config_b2 = Button("b2"); Button config_b3 = Button("b3"); const void *const buttons[3] PROGMEM = { &config_b1, &config_b2, &config

我得到了一个错误:

error: 'void*' is not a pointer-to-object type
对于以下代码:

Button config_b1 = Button("b1");
Button config_b2 = Button("b2");
Button config_b3 = Button("b3");

const void *const buttons[3] PROGMEM = {
&config_b1, &config_b2, &config_b3
};
在某些功能中:

(Button)*buttons[1]->setText("Foo");
转换到按钮失败


这只是一个简单的例子。数组“buttons”将具有不同类型的对象,因此我需要将其初始化为void,然后在函数中转换为适当的类型

我认为这是一个简单的优先级错误,您需要

((Button *) buttons[1])->setText("foo");

顺便问一下,你确定这是C吗?这种调用看起来像C++(它可以是C,但是你需要一个显式的<代码>这个< /Cord>在大多数情况下是等价的)。代码>看起来像C++。此外,您不能取消< <代码> Value*/Cube >,因为<代码> Value是不完整的类型。它看起来像是使用C的OO风格编程,C++中不可用的那种类型。@ toBySwitt,那么它们如何使用类型名称<代码>按钮>代码>作为函数?在C++中,这是有效的,因为它将构造<代码>按钮< /Cord>对象。我想不出这是一个有效的C(除了宏地狱)。@TobySpeight C不允许您给类型和构造函数取相同的名称。此外,在C中,OO经常使用不完整类型,即指针而不是直接分配实例。C和C++都不允许从“代码> const类型*const < /C> >到<代码>类型*<代码>。这是无效的指针转换。像这样使用
void*
在这两种语言中都不是一个好主意。我把它看作是一个简单的C函数指针,但不确定你所说的
这个
等价物是什么意思。你能评论一下吗?谢谢,伙计,效果很好!顺便说一下,这个代码是C和C++代码的混合。干杯