2016-07-29 39 views
-6
<code> 
#ifndef VECTOR_H 
#define VECTOR_H 


template <class T> 
class Vector 
{ 
public: 

    Vector(); 

    ~Vector(); 

    void add(T element); 

    int size() const; 

    T get(int i) const; 

    void set(int i, T element); 

    bool contains(T element); 

    Vector<T>& operator=(const Vector<T> &rhs); 

private: 

    int numElements; 

    int capacity; 

    T *elements; 

    void expand(); 
}; 

template <class T> 
Vector<T>::Vector() 
{ 
    numElements = 0; 
    capacity = 10; 
    elements = new T[capacity]; 
} 

template <class T> 
Vector<T>::~Vector() 
{ 
    delete[] elements; 
} 

template <class T> 
void Vector<T>::add(T element) 
{ 
    if (numElements >= capacity) 
    { 
     expand(); 
    } 

    elements[numElements] = element; 
    numElements++; 
} 

template <class T> 
int Vector<T>::size() const 
{ 
    return numElements; 
} 

template <class T> 
T Vector<T>::get(int i) const 
{ 
    return elements[i]; 
} 

template <class T> 
void Vector<T>::set(int i, T element) 
{ 
    elements[i] = element; 
} 

template <class T> 
void Vector<T>::expand() 
{ 
    T *tempElements = new T[capacity * 2]; 

    for (int i = 0; i < capacity; i++) 
    { 
     tempElements[i] = elements[i]; 
    } 

    delete[] elements; 
    elements = tempElements; 
    capacity *= 2; 
} 

template <class T> 
bool Vector<T>::contains(T element) 
{ 
    for (int i = 0; i < numElements; i++) 
    { 
     if (elements[i] == element) 
     { 
      return true; 
     } 
    } 

    return false; 
} 

template <class T> 
Vector<T>& Vector<T>::operator=(const Vector<T> &rhs) 
{ 
    delete[] elements; 
    numElements = rhs.size(); 
    capacity = numElements * 2; 
    elements = new T[capacity]; 
    for(int i = 0; i < numElements; i++) 
     elements[i] = rhs.get(i); 


} 

#endif 
</code> 

私はC++にはかなり新しく、データ構造と抽象化に関する課題があります。私はいくつかのCPPとヘッダーファイルを持っていますが、これ以外は正常に動作します。私がコンパイルすると、 "重大度コード説明プロジェクトファイルの行の抑制状態 エラーC4716 'と表示されます。Vector :: operator =':値を返す必要があります。エラーC4716 in C++

+9

エラーメッセージをもう一度読み、 'operator ='関数を確認してください。それは何かを返しますか?つまり、実際には 'return'ステートメントを使用しますか? –

+4

「Vector :: operator = valueを返さなければならない」のどの部分を理解できませんでしたか? –

答えて

1

Vector<T>::operator=()は返されません。

これは、このような構文が可能になります:

a = b = c;

だからメソッドの最後に

return (*this); 

を置きます。

+0

Ah。私は何かを返す必要があることを知っています。しかし、何がわからない。どうもありがとう –