2013-04-09 46 views
-6

我做了一個小的自定義陣列容器列表一段時間了,它工作得很好,這是我的重載的「=」操作符:模板重載=運算符在一個類中工作並且無法在另一個類中編譯?

List<T>& operator=(const List<T>& other); //in List.h 


//in List.inl 
    template<typename T> 
    List<T>& List<T>::operator=(const List<T>& other) 
    { 
     _size = other._size; 

     if(_size < _capacity) 
     { 
      _capacity = _size; 
      _AdaptCapacityChange(); 
     } 

     for(uint i = 0; i < other._size; i++) 
     { 
      _data[i] = other._data[i]; 
     } 

     return(*this); 
    } 

然而,現在我做同樣在其他類:

PointIndices<T>& operator=(const PointIndices<T>& point); //in PointIndices.h 
//in PointIndices.inl 
     template<typename T> 
     PointIndicess<T>& PointIndices<T>::operator=(const PointIndicess<T>& point) 
     { 
      indices[0] = point.indices[0]; 

      return(*this); 
     } 

它不突出顯示PointIndices和運算符關鍵字保持藍色,並且編譯器給我:錯誤2錯誤C4430:缺少類型說明符 - int假定。注意:C++不支持default-int

在這兩種情況下,我都正確地包含了.inl文件,PointIndices的其餘方法工作正常,只有操作員給我一個問題。但是在List中,同樣的重載操作符工作正常。我很困惑,這可能是什麼原因造成的?

編輯:請測試用例:

頁眉:

template<class T> 
    class PointIndices 
    { 
     public: 
      PointIndices(); 
      PointIndices(T P1); 
      virtual ~PointIndices(); 

      PointIndices<T>& operator=(const PointIndices<T>& point); 

      T P1() const; 
      T& P1(); 

     protected: 
      T indices[1]; 
    }; 
#include "PointIndices.inl" 

INL文件:

template<typename T> 
    PointIndices<T>::PointIndices() 
    { 
     indices[0] = 0; 
    } 

    template<typename T> 
    PointIndices<T>::PointIndices(T P1) 
    { 
     indices[0] = P1; 
    } 

    template<typename T> 
    PointIndices<T>::~PointIndices() 
    { 

    } 

    template<typename T> 
    PointIndicess<T>& PointIndices<T>::operator=(const PointIndicess<T>& point) 
    { 
     indices[0] = point.indices[0]; 

     return(*this); 
    } 

    template<typename T> 
    T PointIndices<T>::P1() const 
    { 
     return(indices[0]); 
    } 

    template<typename T> 
    T& PointIndices<T>::P1() 
    { 
     return(indices[0]); 
    } 
+0

Yo你在編寫C++還是PHP? ('$ index')?\ – 2013-04-09 09:35:29

+0

對不起,我爲了更容易閱讀而對其進行了更改,但是在Visual Studio中允許$,所以沒關係 – 2013-04-09 09:36:14

+0

是複製/粘貼錯誤:'PointIndicessTx>&'? – 2013-04-09 09:37:21

回答

4

你聲明一個類模板PointIndices,但在函數定義拼錯了它:

template<typename T> 
PointIndicess<T>& PointIndices<T>::operator=(const PointIndicess<T>& point) 
//  ^extra "s" here         ^and here 
相關問題