gpt4 book ai didi

c++ - C++中通过引用传递类成员函数返回值

转载 作者:行者123 更新时间:2023-11-28 01:06:02 24 4
gpt4 key购买 nike

我一直在寻找这个问题的解决方案,但似乎找不到。我敢肯定这个一般性问题之前曾在某个地方被问过,但希望你能帮助解决我的具体情况......

我有一个包含以下(私有(private))成员的类模板 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;

到具有以下原型(prototype)的 someClass 类之外的函数:

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

代码可以编译,但出现运行时错误(来自 someFunction 中另一个函数调用的错误状态值)。

如何正确地将 I2 传递给 someFunction

非常感谢...

最佳答案

您正在尝试获取 retGrid 返回的临时对象的地址(在本例中为指针,但这并不重要)。因此,您不能使用 & 方法。

如果没有 & 符号,您会将内部数组从 I2 传递到 someFunction。如果这对您来说不合适(即因为您遇到某种运行时错误),请考虑制作此数组的拷贝并将其传递给 someFunction

关于c++ - C++中通过引用传递类成员函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6071896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com