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;
}

エラー:

関数'voidfn(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;
}

関数'voidfn(const void *)':9行目:エラー:static_cast from type'const void *'to type'char *'は、-Wfatal-errorsが原因で終了したconstnessコンパイルをキャストします。

4

4 に答える 4

6

ポインタ自体の値、またはポインタが指す値を表示したいですか?最初のケースでは、単純です

 cout << p;

十分なものです。2番目のことを達成したい場合-それは不可能です-ポインタは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 に答える