我有一个项目,我需要用gettip获取地址的值(ASCII代码为177),但我总是得到同样的错误: 'void *'不是指向对象的指针类型
我可以修改主要内容,类是这样给出的。
#include <iostream>
using namespace std;
class A{
static unsigned char name;
public:
void* gettip();
};
unsigned char A::name=(char)177; //Ascii conversion of 177
void* A::gettip() {return &name;};
int main()
{
A b;
cout<<*b.gettip(); //here is the error
return 0;
}
谢谢!
答案 0 :(得分:4)
cout<<*b.gettip();
要求编译器获取b.gettip()
的结果,即void*
。然后它前面的星要求它取消引用指针 - 答案必须是void
类型,这是不可能的。
如果您只想打印 指针的值,而不是它指向的内容,您可以轻松地执行此操作:cout << b.gettip();
如果您希望在指针处打印值,首先需要将其强制转换为可以包含对象的类型的指针,如unsigned char
。这可以通过执行static_cast<unsigned char*>(b.gettip())
来完成。打印结果非常简单:cout << *static_cast<unsigned char*>(b.gettip())
。
请注意,您无法通过将其转换为unsigned char*
来打印已转换的cout
的值,因为它将被解释为c样式字符串的开头。
答案 1 :(得分:1)
您对gettip()
的调用会返回一个无效指针。没有演员表,你不能去引用它。但我不认为这是正确的解决方案。您应该更改gettip()
,以便它返回unsigned char
。
unsigned char A::gettip()
{
return name;
};
答案 2 :(得分:0)
cout<<*((unsigned char*)(b.gettip()));
或将其拆分以使其更具可读性
void * v = b.gettip();
unsigned char * p = (unsigned char*)v;
cout<<*p;