【发布时间】:2011-12-18 11:36:29
【问题描述】:
我有一个 C++ 程序:
struct arguments
{
int a, b, c;
arguments(): a(3), b(6), c(9) {}
};
class test_class{
public:
void *member_func(void *args){
arguments vars = (arguments *) (*args); //error: void is not a
//pointer-to-object type
std::cout << "\n" << vars.a << "\t" << vars.b << "\t" << vars.c << "\n";
}
};
编译时会报错:
error: ‘void*’ is not a pointer-to-object type
有人可以解释我做错了什么来产生这个错误吗?
【问题讨论】:
-
是的,有。您是否尝试过给
args提供另一种数据类型? -
在这个例子中你没有任何“抽象类型”(我假设你的意思是抽象基类)。您可能指的是
*(arguments *)args,它将args从void *转换为arguments *,然后 取消引用它。您当前的代码尝试取消引用void *(这是非法的),然后将取消引用的值转换为arguments *,这几乎肯定不是您想要的。 -
@Chris 是的,这就是我想要做的,感谢您的澄清。顺便说一句,我认为结构和类被认为是抽象类型,而例如。 int、float 是非抽象的。
-
另外,您的
member_func返回void *但您在任何地方都没有return语句。另外,为什么需要使用void *?为什么不能只使用arguments *(或者,更好的是,只使用arguments或const arguments&)? -
@MattMunson - 不,“抽象”是指具有纯虚拟成员函数的类(或结构)。我不知道你对 C++ 了解多少,但如果你正在学习 C++ 课程(这是我的猜测),那么你最终会达到这一点,所以暂时不用担心。
标签: c++ casting void-pointers abstract-data-type