在C ++中使用Accessor从Object返回数组

时间:2014-11-04 22:28:19

标签: c++ arrays class pointers object

我是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
}

2 个答案:

答案 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; }