2016-11-17 62 views
1

,我發現了錯誤:C++動態構造

no operator "[]" matches these operands

對於行:

cout << A[j].display(n) 

但是,當我拿出[j],我得到的錯誤:

class "list" has no member "display"

這是我的代碼:

class list 
{ 
protected: 
    int *p; // pointer to a list 
    int size; // dimension 
public: 
    list(int x) 
    { 
     size = x; 
     p = new int[size]; 
    } 
    void get(int i, int val) 
    { 
     p[i] = val; 
    } 
}; 

class dlist : public list 
{ 
public: 
    int display(int i) 
    { 
     return p[i]; 
    } 
}; 

int main() 
{ 
    int n; 
    cout << "Enter elements in a row\n"; 
    cin >> n; 

    list A(n); 

    int j, val; 
    for (j = 0; j < n; j++) 
    { 
     cin >> val; 
     A.get(j, val); 
    } 
    cout << "\n"; 
    cout << "List of elements are :\n"; 
    cout << "----------------------\n"; 
    for (j = 0; j < n; j++) 
     cout << A[j].display(j) << "\t"; 
    cout << "\n"; 
    return 0; 
} 

請幫忙!

+2

'A'不是數組,也沒有重載'[]'運算符。並且,請格式化您的代碼。 –

+0

此外,'A'是一個'list'對象,而不是'dlist'對象,所以它沒有'display'成員。 –

回答

1

該類list確實沒有會員功能display。它是類dlist宣稱像

class dlist : public list 
//... 

有這樣一個成員函數。然而,對象A主定義像類list

list A(n); 

的對象。此外,因爲你必須顯式定義的類型的構造函數,你不能創建類型dlist的對象。

如果你想使用多態,然後引入虛擬功能,例如像虛擬成員函數display

而且此語法

cout << A[j].display(j) << "\t"; 
     ^^^^^^^^^^^^^^ 

不正確,因爲對象A是一個標量對象。它不是一個對象數組,並且類沒有超載operator []

您應該首先明確定義一個虛擬析構函數(否則在程序中可能存在內存泄漏),它會在構造函數中使用參數,複製構造函數和複製賦值運算符在類列表中刪除動態分配的內存。然後你可以定義下標操作符等等。

+0

@JohnnyMopp謝謝。看來我已經正確地更新了這篇文章。:) –