静态const char地址返回

时间:2013-05-15 15:01:38

标签: c++

我有一个项目,我需要用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;
}

谢谢!

3 个答案:

答案 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;