2012-10-08 45 views
1

我剛做了一個人類,並定義了2個重載的構造函數,因爲你看到 然後創建了一個2個對象的數組,但彈出一些錯誤!使用類對象時出錯?

爲什麼我得到這2個錯誤的傢伙? 什麼是[-fpermissive]錯誤?

#include <iostream> 
using namespace std; 
class person 
{ 
    int x; 

public: 
    person() { 
     x=0; 
    } 
    person(int y){ //error 
     x=y; 
    } 
}; 


int main() 
{ 
    int n; 

    cin>>n; 

    person* Arr= new person[2]; 

    Arr[0]=new person(n); //error 
    return 0; 
} 
+2

發佈錯誤。 – PherricOxide

回答

2

你沒有張貼的錯誤,但我相信他們,

: In function ‘int main()’: 
:25:24: error: invalid conversion from ‘person*’ to ‘int’ [-fpermissive] 
:11:5: error: initializing argument 1 of ‘person::person(int)’ [-fpermissive] 

你有兩個選擇。一,製作一組人指針,指向你用「新」關鍵字創建的人物對象,並駐留在堆上。

person* Arr[2]; 
Arr[0]=new person(n); 

你也可以將人的數組,然後將它們設置等於另一個人,這並不需要新的關鍵字。這些將駐留在堆棧上。

person Arr[2]; 
Arr[0]= person(n); 
+0

有兩個以上的選項。事實上,第一種選擇是絕對不好的。如果需要動態數組,則正確的解決方案是'std :: vector'。 –

+0

@BenjaminLindley除非你只需要順序訪問,那麼'std :: list'會更好。 –

+1

@ Code-Guru:即使有[混淆] [刪除]的方式,我會不同意「只需要順序訪問」是一個足夠的理由來選擇向量列表。你需要一個非常特殊的理由來選擇列表,一些向量不提供的優點(我可以選擇只按順序訪問一個向量),並且你需要確保優點不會被向量自身的優勢所抵消。 –

2

您分配由2 person秒的陣列,然後試圖將指針到新分配的存儲person成數組中的第一person。這是對代碼的最小改動,使用指向person的指針數組。 (我不是在說這是否是好的設計。)

int main() 
{ 
    int n; 

    cin>>n; 

    person** Arr= new person*[2]; 

    Arr[0]=new person(n); 
    return 0; 
} 
相關問題