我在使用c ++从类中返回数组时遇到问题。我创建了一个虚拟图像,我想返回图像,以便我可以在另一个类中使用。但不知怎的,它没有按预期工作。
声明:
public:
void Create_Marvin(); //Create dummy marvin image
double* Get_Data(); //Get the dummy marvin image
private:
int Color = 2; //Example color value
int Width = 3; //Example width value
int Height = 2; //Example height value
double* Marvin_Image[2][2][3]; //Marvin image with [c][h][w] array orders
double Marvin_Test_Data[12];
功能实施:
void Create_Dummy_Marvin_Image::Create_Marvin()
{
int x = 0; //Random value initialisation
for (int c = 0; c < Color; ++c) //Iterating through color values
{
for (int h = 0; h < Height; ++h) //Iterating through height of the image
{
for (int w = 0; w < Width; ++w) //Iterating through width of the image
{
x = ++x; //Incrementing the value of x
Marvin_Image[c][h][w] = (double *)x; //Setting the value in the arrays to form marvin image with random values
//cout << "Marvin image :" << int(Marvin_Image[c][h][w]) << "\n"; //Checking the values
Marvin_Test_Data[c*h*w] = Marvin_Image[c][h][w];
cout << "\n Marvin image :" << int(Marvin_Test_Data[c*h*w]);
}
}
}
}
//Get the dummy marvin image
double* Create_Dummy_Marvin_Image::Get_Data()
{
//return Marvin_Image[Color][Height][Width]; //Returning the marvin image ;
return Marvin_Test_Data;
}
当我从main函数打印数据时,Create_Marvin()正确打印数据。但是返回的值不会根据需要打印它。
主():
double* Dummy_Single_Dim_Image[12]; //Single dimensional image with little more array data to avoid unprecidented results
Dummy_Image.Create_Marvin();
Dummy_Single_Dim_Image[12] = Dummy_Image.Get_Data(); //Get the marvin image as three dimensional matrix with [c][h][w]
如果设置Dummy_Single_Dim_Image [12],上面的行是问题所在;然后控制台生成
Final matlab output :2010112908
Final matlab output :1993390502
Final matlab output :0
Final matlab output :6488492
Final matlab output :6488064
Final matlab output :6029344
Final matlab output :1
Final matlab output :6488400
Final matlab output :19499094
Final matlab output :-2
Final matlab output :6488260
Final matlab output :16777219
但是如果我将数组设置为Dummy_Single_Dim_Image [14];它产生类似
Final matlab output :3
Final matlab output :2
Final matlab output :1
Final matlab output :2
Final matlab output :3
Final matlab output :4
Final matlab output :5
Final matlab output :6
Final matlab output :7
Final matlab output :8
Final matlab output :9
Final matlab output :0
我的所需输出都不是,因为它应该只有1到12的值
进行了以下更改
double Marvin_Image[2][2][3]; //Marvin image with [c][h][w] array orders
double Marvin_Test_Data[12];
double* Create_Dummy_Marvin_Image::Get_Data()
{
//return Marvin_Image[Color][Height][Width]; //Returning the marvin image ;
return Marvin_Test_Data;
}
但是当我在主函数中打印它时,它再次产生一些奇怪的输出,如
double* Dummy_Single_Dim_Image; //Single dimensional image with little more array data to avoid unprecidented results
Dummy_Image.Create_Marvin();
Dummy_Single_Dim_Image = Dummy_Image.Get_Data(); //Get the marvin image
for (int c = 0; c < 2; ++c) //Iterating through color values
{
for (int h = 0; h < 2; ++h) //Iterating through height of the image
{
for (int w = 0; w < 3; ++w) //Iterating through width of the image
{
cout << "\n Final matlab output :" << int(Dummy_Single_Dim_Image[c*h*w]);
}
}
}
我的输出:
Final matlab output :10
Final matlab output :10
Final matlab output :10
Final matlab output :10
Final matlab output :10
Final matlab output :10
Final matlab output :10
Final matlab output :10
Final matlab output :10
Final matlab output :10
Final matlab output :11
Final matlab output :12
这将从main函数中的数组中输出正确的顺序。我不明白为什么!!!
for (int i = -12; i < 0; ++i)
{
cout << "\n Final matlab output :" << int(Dummy_Single_Dim_Image[i]);
}
答案 0 :(得分:0)
首先关闭:
return Marvin_Test_Data[12];
正在返回一些不存在的东西。 Marvin_Test_Data
是一个包含12个double *
元素的数组。 C / C ++中的数组从0开始,所以最后一个元素是Marvin_Test_Data[11]
,但这不太可能是你想要的。您可能需要和double
(不指向double
的指针)的数组,并且您希望返回指向该double
数组的开头的指针,更像是:
double Marvin_Test_Data[12];
double* Create_Dummy_Marvin_Image::Get_Data() {
return Marvin_Test_Data;
}
返回指向数据的指针。