0

在我的程序中,我有一个网格类(例如myGrid),我可以通过重载operator(). 我的问题是每次我调用myGrid(x, y)它返回对单元格的引用时,我都需要声明一个单元格引用。

 cell& myCell = myGrid(x,y);
 myCell.status = currentStatus; 

这样做我得到了一个错误:

(myGrid(x,y)).status = currentStatus;

我需要非常频繁地使用单元格中定义的函数。因此,每次我需要声明一个单元格引用,这使得我的代码看起来很紧急。有什么优雅的方法来解决这个问题吗?非常感谢。干杯!

对不起。有一个错字。假设 status 是单元格中的公共变量,并假设 currentStatus 是与 status 类型相同的变量。

Grid 是一个预定义的类,我无权修改它。它返回对单元格的引用。例如 cell& operator()(int x, int y)

对混乱感到抱歉。myGrid(x,y).status 有效。我之前在某个地方犯了一个错误。当我遵守它时,错误发生在这一行。非常感谢!

4

2 回答 2

0

function-myGrid(x,y) 返回的对象,可能超出范围。我的意思是,您返回的对象可能是一个局部变量。

于 2012-05-05T13:10:33.100 回答
0

你怎么operator()定义(签名)?签名是status什么?它们应该是cell& operator() (int x, int y);int& status();。提供不起作用的最小示例。

最好的方法和优雅的方法是使用显式方法:

myGrid.GetCell(x, y).SetStatus(s);

这更具可读性和可支持性。此外,使用 getter/setter 而不是返回引用可以让您控制值更改的点 - 您可以在那里记录或设置断点。返回参考是不好的做法 - 您可能永远无法确定它会被更改或仅在之后阅读。

于 2012-05-05T13:11:14.727 回答