簡體   English   中英

無效指針轉換 C++

[英]invalid pointer conversion C++

我很高興在這里發布我的第一個問題。

所以我玩了一點點來理解這個概念,我發現了這個錯誤

錯誤:從“int*”到“int”的無效轉換 [-fpermissive]

這是代碼:


#include <iostream>

using namespace std;

int main(){

    int* pa,pb,pc,a,b,c;

    pa = &a;
    cin >> a;
    cout <<"the value of a :"<<a<<endl;
    cout <<"the value of pointer of a :"<<*pa<<endl;

// the problem begins when reading values of b :

    pb = &b; //<== error 
    cin >> b;

    cout << "the value of b : "<<b<<endl;
    cout <<"the value of pointer of b" <<*pb<<endl;
    
    return 0;
}

我不知道為什么它用變量a成功a但在b中用相同的語法失敗了?

編輯:謝謝大家,我知道這個問題很簡單,但我已經向你學習了:)

*綁定到變量名,而不是類型。 所以你真正想要的是:

int *pa,*pb,*pc,a,b,c;

在聲明中

int* pa,pb,pc,a,b,c;

只有pa被聲明為int* 其他變量聲明為int

您需要將變量聲明為

int *pa, *pb, *pc, a, b, c;

一個常見的建議是每行聲明一個變量(參見例如ES.10:每個聲明聲明一個名稱(僅) ),因為*屬於變量,而不是類型,這可能會造成混淆。 你的

int* pa,pb,pc,a,b,c;

實際上是

int* pa;
int pb;
int pc;
int a;
int b;
int c;

但你想要:

int* pa;
int* pb;
int* pc;
int a;
int b;
int c;

換句話說,你得到錯誤是因為你的代碼pb is an int&b is an int* 第一個賦值沒問題,因為pa是一個指針。

另一個常見的建議是始終初始化您的變量(請參閱ES.20:始終初始化一個對象),這樣更好

int a = 0;
int b = 0;
int c = 0;
int* pa = &a;
int* pb = &b;
int* pc = &c;

一旦你弄清楚papbpc是什么類型,你就可以使用auto來獲得“正確的類型”:

auto a = 0;     // 0 is an integer literal of type int
auto b = 0;
auto c = 0;
auto* pa = &a;  // auto would be fine too, &a is a int*
auto* pb = &b;
auto* pc = &c;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM