1
#include <iostream>
using namespace std;

void fn(const void *l) {
    // How to print the value of l. The below line is giving error
    cout << "***" << *l;
}

int main() {
    cout << "Hello World!";
    int d = 5;

    fn((char *) &d);
    return 0;
}

错误:

在函数“void fn(const void*)”中:第 8 行:错误:“const void*”不是指向对象的指针类型编译由于 -Wfatal-errors 而终止。

如下所示尝试铸造。它没有帮助。请提供建议。

#include <iostream>
using namespace std;

void fn(const void *l) {
    // How to print the value of l. The below line is giving error
    int *pInt = static_cast<char*>(l);
    cout << *pInt;
}

int main() {
    cout << "Hello World!";
    int d = 5;

    fn((char *) &d);
    return 0;
}

在函数 'void fn(const void*)' 中:第 9 行:错误:从类型 'const void*' 到类型 'char*' 的 static_cast 丢弃了由于 -Wfatal-errors 而终止的 constness 编译

4

4 回答 4

6

您想显示指针本身的值,还是它所指向的值?在第一种情况下,简单

 cout << p;

足够了。如果你想实现第二件事——这是不可能的——指针指向void,它不能被取消引用,因为编译器不知道它背后“隐藏”的值的类型。

于 2012-11-22T18:28:33.177 回答
5

你不能。void除非您将指针解释为某种东西,否则不会。

设身处地为函数着想:我给你一个指向“某事”的指针。你不知道那是什么东西。我告诉你打印那个东西。你做什么工作?

于 2012-11-22T18:24:15.760 回答
1

该标准在取消引用 void 指针时需要显式强制转换。

不仅编译器本身而且标准都不允许这样做。

于 2012-11-22T18:25:56.567 回答
-6
cout << "***" << *(int*)l ;
于 2012-11-22T18:31:36.900 回答