C ++返回对模板的引用

时间:2014-04-23 15:34:45

标签: c++ reference pass-by-reference

以下是我作业的一小部分,在我为代码编写的测试中,我发现这是错误的。

我有一个模板化的数组类
在那个类中,我有一个名为get的函数,它返回对模板的引用,它的签名是:

template <class T>
T& Array<T>::get(int index) 

显然,我希望能够从数组中获取一个值 - 我在函数中所做的每一个更改都会改变数组中的原始值。
我有以下电话:

Company Hiring=companies.get(companyID);

它确实返回具有相同数据的公司,但每当我更改它(比如说,添加一个工人,更改员工数量......)并返回时,数组中的公司不会更改并保持空白。

我做错了什么?你有什么想法吗?

如果您需要更多详细信息\代码请告诉我,我会编辑。

非常感谢。

3 个答案:

答案 0 :(得分:3)

也许你的意思是:

Company& hiring = companies.get(companyID);

如果您没有捕获该变量中的引用,那么除非您直接操作它,否则您将制作一个永远不会更改的副本。

答案 1 :(得分:2)

您所做错的是您正在复制Company返回的companies.get(companyID)。如果您想更改公司的内容,则需要指定参考:

Company& Hiring = companies.get(companyID);

答案 2 :(得分:1)

Hiring是数组元素的副本。修改不会更改数组中的副本。相反,您需要对数组元素的引用:

Company& Hiring=companies.get(companyID);
       ^