2014-11-04 54 views
0

我是C++中的新成員,並且嘗試自己學習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 
} 
+1

'我是C++新手,試圖自己學習C++'然後我建議你放棄這個,並使用'std :: vector'來代替。在你現在的例子中,對你來說很簡單的東西,只要你開始寫一些玩具程序以外的東西,就會變得很頭疼。 – PaulMcKenzie 2014-11-04 23:12:33

+0

我認爲你是對的。當我開始編碼其他東西時,我會使用std :: vector;陣列給了我很多問題。謝謝你的評論! – 2014-11-05 13:41:45

回答

0

float getArray(){return* arrayA;} 

簽名說,你是返回一個float,和你。

如果你想返回指針(這是同樣的事,作爲一個數組):

float* getArray(){ return arrayA; } 
+0

非常感謝您的評論。你的建議幫助我解決了我的問題。我真的很感謝你的投入! – 2014-11-05 13:38:14

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; 
} 
+0

非常感謝您花時間編寫代碼來支持您的觀點。我運行你的代碼,它幫助我更多地瞭解指針(認爲它對我來說仍然很難!!)。我非常感謝你的好意。我修改了我的代碼,現在正在工作!至少直到我遇到一些其他問題:) – 2014-11-05 13:36:16

+0

看來,我不能在同一問題上投兩個人。因爲他先給了我一個答案,我會投票給molbdnilo。對不起。你的意見澄清了很多事情。再次感謝!! – 2014-11-05 13:44:56