2014-01-08 63 views
0

我正在從一個數組的基本定義的數組頭創建任何類型的數組與這個頭,所以我創建了一個具有函數和構造函數的數組類。 這是我到目前爲止的代碼:使用指針創建數組

#include <iostream> 
#define newline "\n" 
class Arr 
{ 
public: 
    typedef float T; 
public: 
    Arr(int size); 
    Arr(int size, T fill); 
    T get(unsigned index) const; 
    void set(unsigned index, T newvalue); 
    unsigned Size() const; 
    unsigned SIZE; 
    void Print(); 
private: 
}; 
Arr::Arr(int size,T fill) 
{ 
    SIZE = size; 
    T *pointer; 
    for (int i = 0; i < size; i++) 
    { 
     *pointer = fill; 
     pointer++; 
    } 
} 
void Arr::set(unsigned index, T newvalue) 
{ 
    T *pointer; 
    pointer = 0; 
    for (unsigned i = 0; i < index; i++) 
    { 
     pointer++; 
    } 
    *pointer = newvalue; 
} 
void Arr::Print() 
{ 
    T *pointer; 
    pointer = 0; 
    for (unsigned i = 0; i < SIZE; i++) 
    { 
     std::cout << *pointer << newline; 
     pointer++; 
    } 
} 

我知道,我的指針指向任何東西,因爲我的問題是我的指針應指向如何正確地作出此代碼的工作? 任何時候我調試它後崩潰! 謝謝...!

+2

您的代碼太錯誤了。 [讀一本書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。如果您對本書試圖教授的內容有疑問,您可以在這裏問問他們。一旦你對圖書資料相當有信心,你的代碼應該不會錯。 –

+0

你還沒有在'T *指針;'在Arr構造函數中分配內存T.此外,即使你做了,你也沒有跟蹤它的任何地方,只能在方法範圍內而不是在課堂上。 – Abhinav

+0

可能是一個私人數組,或者你可以廢除整個班級,只需使用std :: vector IdeaHat

回答

0

指針是c + +的棘手部分。

這裏是一個很好的鏈接,讓你開始 http://www.codeproject.com/Articles/7042/How-to-interpret-complex-C-C-declarations

的原因,你的代碼不工作是爲數組的存儲塊指向指針不分配。你必須使用前輩新的順序來實現這一點。

下面的例子

int size; 
T arr; 
T* ptr_2_arr; 
ptr_2_arr = new T[size]; 

要檢索數組可以循環使用的外觀

*ptr_2_arr[i]; 

希望這有助於該數組的元素。

郵政問題的陳述,如果您需要更詳細

0

您必須創建一個指向數組的已分配內存的類的數據成員。你也需要定義一個拷貝構造函數,拷貝賦值操作符和析構函數。 另外它會更好,類型的數據成員SIZE類型的構造函數參數sizeide,我不明白爲什麼這個變量是用大寫字母寫的。

也沒有任何意義使數據成員SIZE和函數Size()公開。如果SIZE是公開的,它可以隨時由用戶改變。

0

確保您在構造函數中指定數組的大小。

SIZE = size; 

pointer = new T[size]; //this is where I see an issue. Specify the size of your array. 

for (int i = 0; i < size; i++) 
    { 
     *(pointer + i) = fill; //This is fine but you are filling up the array with only one number, fill. Nothing wrong with that if that is you intention. Try (*(pointer + i) = i; for i though size elements. 
    }