I need to return 3 values. X, Y, Z. I've tried something like this, but it does not work, can anyone help me a bit? I've looked here: Return a float array in C++ and I tried to do same thing, except with 1 dimensional array to return.
class Calculate
{
float myArray[3][4], originalArray[3][4], tempNumbers[4];
float result[3]; // Only works when result is 2 dimensional array, but I need 1 dimension.
public:
Calculate(float x1, float y1, float z1, float r1,
float x2, float y2, float z2, float r2,
float x3, float y3, float z3, float r3)
{
myArray[0][0] = x1;
myArray[0][1] = y1;
myArray[0][2] = z1;
myArray[0][3] = r1;
myArray[1][0] = x2;
myArray[1][1] = y2;
myArray[1][2] = z2;
myArray[1][3] = r2;
myArray[2][0] = x3;
myArray[2][1] = y3;
myArray[2][2] = z3;
myArray[2][3] = r3;
result[0] = 1;
result[1] = 2;
result[2] = 3;
}
float* operator[](int i)
{
return result[i]; //Value type does not match the function type
}
const float* operator[](int i) const
{
return result[i]; //Value type does not match the function type
}
};
Instead of returning a pointer, it's usually better practice to accept a pointer and write out the results there. That way someone can allocate a regular array on the stack and have it initialized by your Calculate.
Something like:
class Calculate
{
float myArray[3][4], originalArray[3][4], tempNumbers[4];
public:
Calculate(float x1, float y1, float z1, float r1,
float x2, float y2, float z2, float r2,
float x3, float y3, float z3, float r3, float *result)
{
myArray[0][0] = x1;
myArray[0][1] = y1;
myArray[0][2] = z1;
myArray[0][3] = r1;
myArray[1][0] = x2;
myArray[1][1] = y2;
myArray[1][2] = z2;
myArray[1][3] = r2;
myArray[2][0] = x3;
myArray[2][1] = y3;
myArray[2][2] = z3;
myArray[2][3] = r3;
result[0] = 1;
result[1] = 2;
result[2] = 3;
}
};
Some other tweaks you can do - separate the constructor from the calculation, since constructors are more for initialization; and pass arrays for safer memory control:
class Calculate
{
float myArray[3][4], originalArray[3][4], tempNumbers[4];
public:
Calculate(const float initArray[3][4])
{
for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
myArray[i][j] = initArray[i][j];
}
void DoCalculation(float result[3]) const
{
result[0] = 1;
result[1] = 2;
result[2] = 3;
}
};
int main()
{
float myArray[3][4] =
{
{ 0, 1, 2, 3 },
{ 4, 5, 6, 7 },
{ 8, 9, 0, 1 }
};
float result[3];
Calculate calc(myArray);
calc.DoCalculation(result);
return 0;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With