2012-11-22 31 views
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(常量無效*)':8 行:錯誤: 'const的無效*' 不是指針到對象類型 由於重大錯誤而終止編譯。

嘗試過鑄造,如下所示。它並沒有幫助。請提供建議。

#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(常量無效*)': 第9行:錯誤:從的static_cast類型 'const的空隙*' 爲類型 '字符*' 擅自拋棄常量性 彙編由於-Wfatal-終止錯誤

+0

您不能取消引用* cv *'void'的指針。 – rightfold

+0

'void *'不能被解除引用。它必須被轉換成具體類型的指針。 – sgarizvi

回答

-6
cout << "***" << *(int*)l ; 
+0

This worked .. Great .. Thanks! – Rachel

+4

如果我把它稱爲'fn(new char),'?這不是沒有定義的行爲嗎?這是最糟糕的建議。導致預期行爲的東西,對於未經訓練的眼睛提供了一個解決方案。危險的。 –

+0

什麼是處理這個陸correct的正確方法? – mreff555

5

你不能。除非你將void指針解釋爲某種東西。

把自己放在了功能的鞋子:我給你一個指向「東西」。你不知道那是什麼。我告訴你打印一些東西。你是做什麼?

1

標準提領一空指針時,需要有明確的轉換。

不僅編譯器本身也是標準不允許這樣。

6

想要顯示指針本身的值或它指向的值嗎?在第一種情況下,簡單的

cout << p; 

就足夠了。如果你想實現第二件事 - 這是不可能的 - 指針指向void,並且它不能被解除引用,因爲編譯器不知道它後面隱藏的值的類型。

+0

+1,你實際上正在回答這個問題,雖然OP可能不知道它。 – juanchopanza