2016-01-14 1 views
0

Получение ошибки: незаконное использование этого TypeName Это operator+ перегрузка:C++ бросает исключение незаконно

template<class T> 
     inline Vec<T> Vec<T>::operator+(const Vec& rhs) const 
     { 
      int vecSize = 0; 
      if (rhs.size() == 0 || size() == 0) { 
       throw ExceptionEmptyOperand; 
      } 
      if (rhs.size() != size()) { 
       throw ExceptionWrongDimensions; 
      } 
      else 
      { 
       Vec<T> vec; 
       vecSize = rhs.size(); 
       for (int i = 0; i < vecSize;i++) { 
        vec.push(*this[i] + rhs[i]) 
      } 

return vec; 
     } 

Это объявление о перегрузке operator[]:

T& operator[](unsigned int ind); 
    const T& operator[](unsigned int ind) const; 

Первый был чтобы иметь возможность изменять векторные значения.

Это то, что я пытался сделать, и получаю сообщение об ошибке, как описано выше:

template<class T> 
inline T& Vec<T>::operator[](unsigned int ind) 
{ 
    list<T>::iterator it = vals_.begin(); 
    if (size() == 0) { 
     throw ExceptionEmptyOperand; 
    } 
    if (size() < ind) { 
     throw ExceptionIndexExceed; 
    } 


    for (unsigned int i = 0; i<ind; i++) { 
      ++it; 
     } 
     return *it; 
    } 

это дает мне эту ошибку: ExceptionEmptyOperand незаконное использование такого типа, как выражение

+0

Что вы пробовали для реализации? С какими проблемами вы столкнулись? – P0W

+0

вы забыли вернуть результат в 'operator +' – user463035818

+0

где вы храните фактические значения? – user463035818

ответ

1

Если у вас имеют тип ExceptionEmptyOperand, тогда throw ExceptionEmptyOperand; является недопустимым синтаксисом. Вам необходимо создать объект такого типа, а затем выбросить его:

throw ExceptionEmptyOperand(); 

// or 
ExceptionEmptyOperand e; 
throw e; 
+0

Спасибо! это вызвало ошибку! –

0
template<class T> 
    inline Vec<T> Vec<T>::operator+(const Vec& rhs) const 
    { 
     int vecSize = 0; 
     if (rhs.size() == 0 || size() == 0) { 
      throw ExceptionEmptyOperand; 
     } 
     if (rhs.size() != size()) { 
      throw ExceptionWrongDimensions; 
     } 
     Vec<T> vec; 
     vecSize = rhs.size(); 
     for (int i = 0; i < vecSize;i++) { 
      vec.push((*this)[i] + rhs[i]) 
     return vec; 
    } 


template<class T> 
inline T& Vec<T>::operator[](unsigned int ind) 
{ 
    if (size() == 0) { 
     throw ExceptionEmptyOperand; 
    } 
    if (size() <= ind) { 
     throw ExceptionIndexExceed; 
    } 

    list<T>::iterator it = vals_.begin(); 
    for (unsigned int i = 0; i<ind; i++) { 
      ++it; 
    } 
    return *it; 
} 

template<class T> 
inline const T& Vec<T>::operator[](unsigned int ind) const 
{ 
    if (size() == 0) { 
     throw ExceptionEmptyOperand; 
    } 
    if (size() <= ind) { 
     throw ExceptionIndexExceed; 
    } 
    list<T>::const_iterator it = vals_.begin(); 

    for (unsigned int i = 0; i<ind; i++) { 
     ++it; 
    } 
    return *it; 
}