2016-11-22 163 views
-4

我需要一點幫助。當我編譯我的代碼它給我這個錯誤:#[錯誤]從'int *'無效轉換爲'int'

[Error] invalid conversion from 'int*' to 'int' [-fpermissive]

我的代碼如下,請大家指出的錯誤:

#include <iostream> 

using namespace std; 

class ptrArry{ 
private: 
    int *ptr; 
    int MaxSize; 
public: 
    ptrArry(){ 
     ptr=NULL; 
     MaxSize=2; 
     for(int i=0; i<MaxSize; i++){ 
      *(ptr+i) = new int[MaxSize]; 
     } 
    } 
    void setArry(int val){ 
     for(int i=0; i<MaxSize; i++){ 
      for(int j=0; j<MaxSize; j++){ 
       cout<<"i="<<i<<endl; 
       cout<<"j="<<j<<endl; 
       ptr=val; 
      } 
     } 
    } 
    void getArry(){ 
     for(int i=0; i<MaxSize; i++){ 
      for(int j=0; j<MaxSize; j++){ 
       cout<<"i="<<i; 
       cout<<"j="<<j; 
       cout<<ptr[i][j]; 
       cout<<endl; 
      } 
     } 
    } 
}; 
int main() { 
    ptrArry obj1; 
    obj1.setArry(50); 
    obj1.getArry(); 
    return 0; 
} 
+3

Java標記是故意的嗎? –

+1

這裏和java有什麼關係? – SomeJavaGuy

+2

好吧,錯誤消息通常帶有行號......可能對仔細觀察該特定行很有幫助。而且你應該**閱讀關於內存管理和指針的正確教程。即使編譯了代碼,它也會像篩網一樣泄漏內存,並立即收到SIGSEGV。 – Paul

回答

3

一對夫婦的事情,我可以看到:

setArray()函數是導致它的原因:ptr=val; 您正在爲指針變量賦值一個整數值 - 這正是編譯器所抱怨的。您應該這樣做:*ptr=val;並且通過這樣做,您將存儲整數值到ptr變量指向的內容。

在兩個大括號之間的代碼中存在一個存在類的定義結束的錯誤。

編輯:感謝下面的whozcraig的評論:*(ptr+i) = new int[MaxSize];也沒什麼意義。

+0

你是對的,我剛剛編輯了我的答案,指出這只是我能馬上看到的一個錯誤。代碼中還有一個流浪的字符。我很確定編譯器應該列出多個錯誤。 :) –