2014-01-08 112 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. 
    }