我是C ++的新手,并试图自己学习C ++。我为我的项目编写了代码,但是我遇到了从类的访问者返回数组时遇到的困难。
我有一个名为LoadData的类,它接受array_a []。 LoadData类构造函数将array_a的内存块复制到arrayA。访问器,getArray()尝试返回指向arrayA的指针。
在main()中,我创建了一个对象数组objVec [obj_i],它收集数据并存储在类中。当我尝试从LoadData返回一个数组并打印出内容时,我只得到数组的第一个元素,其余的似乎是返回内存地址。
我相信我遇到的问题要么是我在访问器中返回数组的方式,要么是我调用getArray()的方式。使用指针也很麻烦。
我在这个问题上挣扎了大约一个星期,所以任何建议和意见都会受到赞赏!非常感谢你提前。
class LoadData{
private:
float* arrayA;
public:
//constructor
LoadData(float array_a[])
//accessor
float getArray(){return* arrayA}
};
LoadData::LoadData(float array_a[]){
arrayA = new float[sizeOfArray]
memcpy(arrayA, array_a, sizeof(int)*sizeOfArray);
}
int main(){
class LoadData;
int objSize = 6;
LoadData **objVec = new LoadData*[objSize];
obj_i = 0;
//loop to load data
while (...){
objVec[obj_i] = new LoadData(array_a)
}
float *copyArray;
*copyArray = objVec[1]->getArray();
for (int i = 0; i<sizeOfArray; i++){
cout<<*(copyArray + i) <<'\t';
}
//end of main
}
答案 0 :(得分:1)
不幸的是我无法添加到molbdnilo的答案中。但简短的回答是他是正确的,你正在返回数组的第一个索引的浮点值。这与指向数组第一个索引的指针不同。我写了下面的代码,我验证了他正在解释的内容。只需编译它,请记住只是输出到控制台来显示值。我希望这个例子能说明他和我在说什么。
/***********************
** Include Directives **
***********************/
#include <iostream>
using namespace std;
/**************************
** Function Declarations **
**************************/
float getArray(float* myArray);
float* getArrayPtr(float* myArray);
int main()
{
// MyVar stores return of type float value of array index [0]
float myVar = 0.0f;
// MyVar2 stores return of type float* value of memory address location
float* myVar2 = 0;
float myArray[10] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f,
6.0f, 7.0f, 8.0f, 9.0f, 10.0f};
myVar = getArray(myArray);
myVar2 = getArrayPtr(myArray);
cout << endl;
// This value will be the first array index value
cout << "My Var = " << myVar << endl;
// This value will be the address of the first element of the array
cout << "My Var Ptr = " << myVar2 << endl;
return 0;
}
float getArray(float* myArray)
{
for(int counter = 0; counter < 10; ++counter)
{
cout << myArray[counter] << endl;
}
return* myArray;
}
float* getArrayPtr(float* myArray)
{
return myArray;
}
答案 1 :(得分:0)
的签名
float getArray(){return* arrayA;}
说你正在归还float
,而你是。
如果要返回指针(不与数组相同):
float* getArray(){ return arrayA; }