Я искал решение этой проблемы, но, похоже, не могу его найти.Я уверен, что этот общий вопрос уже задавался где-то ранее, но, надеюсь, вы можете помочь с моей конкретной ситуацией ...
У меня есть шаблон класса 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
со следующим прототипом:
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
?
Большое спасибо ...