--University homework--返回泛型函数对象的引用(与指针或非指针属性)
我已经与通用功能看起来像这样的工作:
template<class T1, class T2, int max>
class Collection{
T1* _elements1[max];
T2* _elements2[max];
int _count;
public:
// ctor
bool AddElement(const T1& e1, const T2& e2)
{
for (int i = 0; i < _count; i++)
if (_elements1[i] == e1 && _elements2[i] == e2)
return false;
_elements1[_count] = e1;
_elements2[_count] = e2;
_count++;
return true;
}
int GetMax()const { return max;}
T1& GetElement1(int index)const { return *_elements1[index]; }
T2& GetElement2(int index)const { return *_elements2[index]; }
}
在main()
:
Collection<int, double, 6> collection;
for (int i = 0; i < 6; i++)
collection.AddElement(i, i + 0.4);
cout << collection << endl;
我也用const
在operator<<
这个类,一切的伟大工程,与0123没有编译器的投诉。
但是,今天我尝试了这个班的稍微不同的版本,我们应该练习,因为它会以某种形式在考试中。
template<class T1, class T2, int max>
class Collection{
T1 _elements1[max];
T2 _elements2[max];
int _count;
public:
// ctor
int GetMax()const { return max;}
T1& GetElement1(int index)const { return _elements1[index]; }
T2& GetElement2(int index)const { return _elements2[index]; }
}
的此不同的是,T1
和T2
不是的pointers
数组,但纯对象数组,并在底部,当return
ING,有没有必要取消引用。虽然我做google一下,发现如果我把另一个const
在这些功能中的前像这样
error C2440: 'return' : cannot convert from 'const int' to 'int &'
:
const T1& GetElement1(int index)const { return _elements1[index]; }
const T2& GetElement2(int index)const { return _elements2[index]; }
然而,在后者的例子中,我得到这个错误
错误消失。
当然,这解决了我的问题,但我宁愿了解为什么会发生这种情况以及发生了什么。如果有一个简单的方法可以解释我提供的两个示例之间的差异,那么将不胜感激。
是什么例子中的'T1'和'T2'无法编译? – NathanOliver
在这个阶段,我分别用'int'和'double'测试了一个简单的for循环,调用集合函数AddElement(const T1&e1,const T2&e2)。请注意,在另一个示例(其中T1和T2是指针数组)中应用了相同的测试,并且它不会失败。 – developer10
所以你同时调用'GetElement1'和'GetElement2',但只有'GetElement1'出错? – NathanOliver