-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]);
}
Yo你在編寫C++還是PHP? ('$ index')?\ – 2013-04-09 09:35:29
對不起,我爲了更容易閱讀而對其進行了更改,但是在Visual Studio中允許$,所以沒關係 – 2013-04-09 09:36:14
是複製/粘貼錯誤:'PointIndicessTx>&'? – 2013-04-09 09:37:21