2016-02-25 46 views
0

對於一個類的分配,我們必須在模板化的.h文件中寫入STL向量。我試圖運行這個和我的所有成員函數工作,除了分配錯誤的重載。它處於最底層,是倒數第二個成員函數。 當給出的任務,我被要求超載Vector<T>& operator=(const Vector&v)模板化的C++類有一個'預期的不合格id'

template <class T> 
class Vector{ 
    private: 
    int current_size, capacity; 
    T* arr; 

    public: 

    Vector(); 
    ~Vector(); 
    unsigned int size(); 
    void grow(); //where does this belong? 
    void push_back(const T& elt); 
    void pop_back(); 
    T& at(int pos); 
    T& front(); 
    T& back(); 
    bool empty(); 
    void insert (const T&elt, int pos); 
    void erase(int pos); 
    Vector<T>& operator=(const Vector& v); 
    T& operator[](int n); 

    }; 

    template <class T> 
    Vector<T>& Vector<T>::operator=(const Vector& v){ 
    current_size= v.size(); 
    capacity= v.capacity(); 
    } 

錯誤是「預期不合格的ID」,並錯誤的行是:
「矢量&矢量::運算符=(const的載體& v )「{

+1

爲什麼要回滾編輯以減少可​​讀性? – NathanOliver

+0

對不起,我剛開始使用stackoverflow,我不擅長這@NathanOliver – Lin0523

+0

你應該包括確切的錯誤信息,並指出它發生的地方。 – rodrigo

回答

0

這段代碼有很多很多問題。

Zeroth,您的縮進風格使得閱讀代碼變得非常困難。每次你打開一個新的範圍,縮進!

首先,定義成員函數:

template <class T> 
typename Vector<T>::T& at(int pos) 

template <class T> 
Vector<T>:: T& back() 

正確的語法return-type class-name::member-name。所以這些應該是:

template <class T> 
T& Vector<T>::at(int pos) 

template <class T> 
T& Vector<T>::back() 

二,delete -ing。 arr是動態數組到T。只有它是動態的。在多個地方嘗試刪除單個元素:

delete arr[current_size-1]; 

這是無效操作。

第三,對於您的具體問題,參數vconst

template <class T> 
Vector<T>& Vector<T>::operator=(const Vector<T>& v){ 

這意味着你只能叫const -qualified成員函數。 size()不是const合格。你必須添加:

unsigned int size() const; 
        ^^^^^^ 

之後,capacity不是一個成員函數,它只是一個成員:

capacity= v.capacity(); 
        ^^ 

之後,你的拷貝賦值運算符需要實際的所有元素複製過 - 否則它不會真的......複製任何實質內容。

+0

而不是遵循0/3/5的規則。 – NathanOliver

+0

template Vector ::&operator =(const Vector&v){ current_size = v.current_size; capacity = v.capacity;} 這是更準確嗎? 你能澄清你的意思嗎?複製物質的東西 – Lin0523

+0

@ Elina0524那麼,矢量是保持正確的東西。如果您從其他媒體複製,則需要複製「內容」。 – Barry