我一直在寻找这个问题的解决方案,但似乎找不到一个。我敢肯定,这个一般性问题已前的某个地方有人问,但希望你能与我的具体情况帮...在C++中通过引用传递类成员函数返回值
我有一个类模板someClass
包含以下(私有)成员:
int size_x;
int size_y;
int size_total;
T * grid;
someClass
包含一个构造函数,看起来像这样:
someClass (const int x, const int y)
: size_x (x), size_y (y), size_total (x*y)
{
grid = new T [size_total];
}
一个拷贝构造函数,看起来像这样:
someClass (const someClass & rhs)
{
size_x = rhs.size_x;
size_y = rhs.size_y;
size_total = rhs.size_total;
grid = new T [size_total];
memcpy(grid, rhs.grid, size_total*sizeof(T));
}
一个成员函数,看起来像这样:
T * retGrid (void) const
{
return grid;
}
和赋值运算符,看起来像这样:
someClass & operator= (const someClass & rhs)
{
if (this != &rhs)
{
size_x = rhs.size_x;
size_y = rhs.size_y;
size_total = rhs.size_total;
grid = new T [size_total];
memcpy(grid, rhs.grid, size_total*sizeof(T));
}
return *this;
}
我试图通过以下两种someClass
对象
someClass<double> *I1 = new someClass<double>(10,10);
someClass<double> I2 = *I1;
以someClass
类以外的功能与以下原型PE:
int someFunction(double *arr);
此调用正常工作:
int status;
status = someFunction(I1->retGrid()); // Properly working function call
但这并不
status = someFunction(&I2.retGrid()); // Compiler gives error that says "error: invalid lvalue in unary &"
而且如果我叫someFunction
这样的:
status = someFunction(I2.retGrid()); // Compiler gives no error but function returns error value in status
代码编译但是我得到了一个运行时间e rror(来自someFunction
内的另一个函数调用的错误状态值)。
如何正确地将I2
传递给someFunction
?
非常感谢......
您需要定义一个拷贝构造函数。 – 2011-05-20 12:31:06
谢谢Neil,我在代码中有一个拷贝构造函数,但是我把它从这篇文章中删除了。我编辑了这篇文章以包含它。 – Evan 2011-05-20 12:36:56
您可以检查I2的内容(例如,将它们转储出来或在调试器中检查)?它是否已从I1正确复制? (我猜测你的“坏状态值”可能反映了以某种方式通过双阵列的内容。) – AAT 2011-05-20 13:00:13