4

こんにちは私はクラス内で動的配列を使用するのに問題があります。「クラスVectorDoubleには、doubleの動的配列用のプライベートメンバー変数があります」と指示されました。私はこのプログラムのヘッダーファイルを書いているところまでですが、それを乗り越えていません。このクラスは、容量に達したらサイズを2倍にする必要があります。これが私のコードです:

#include <iostream>
using namespace std;

// VectorDouble class header file
class VectorDouble
{
    public:
    // constructor for an empty vector of type double
        VectorDouble();
    // constructor that take an int argument for an integer size of and array
        VectorDouble(int initial_size);
    // copy constructor
        VectorDouble(VectorDouble &object);
    // destructor to return dynamic memory to the freestore
        ~VectorDouble();
    // overloaded operator = for VectorDouble class
        VectorDouble& operator =(const VectorDouble &source);
    // overloaded operator == for VectorDouble class
        friend bool& operator ==(const VectorDouble &this_vector,
                                 VectorDouble &other_vector);
    // adds a new element at the end of the array
        void push_back();
    // returns allocated size of VectorDouble dynamic array
        int capacity();
    // returns used size of the VectorDouble object
        int size();
    // allocates a specified block of memory for specified number of double
    // type values
        void reserve(int new_reserve);
    // changes the size of the dynamic array
        void resize(int new_size);
    // returns the value at the specified index
        double value_at(int index);
    // changes the value at the specified index to double value d
        void change_value_at(double d, int index);

    private:

        int count;
        int max_count;
        int index_pointer;
        *index_pointer = new double[100]; 

}; 

私が得ているエラーはすべてこの行にあります:* index_pointer = new double [100];

  • `new'は定数式に表示できません

  • ISO C ++は、型のない`index_pointer'の宣言を禁止しています

  • ISO C ++は、メンバー`index_pointer'の初期化を禁止しています

  • `index_pointer'を静的にする

  • 非整数型`int*'の静的データメンバーのクラス内初期化が無効です

4

2 に答える 2

8

ポインタには型が必要です。その行をに変更します

double* index_pointer;

そして、コンストラクターに次の行を追加します

index_pointer = new double[100];

他のコンストラクターや代入演算子についても同様です。

ただし、index_pointerという名前の別のプライベートintメンバーがあるため、これは名前の競合でもあります。そのメンバーが何のためにあるのかはわかりませんが、実際にそれが必要な場合は、そのメンバーまたはポインタに別の名前を付ける必要があります。

delete[] index_pointer;デストラクタで忘れないでください。

于 2012-11-20T19:26:44.993 に答える
3

を使用する必要がありますstd::vector<double>

于 2012-11-20T19:27:33.220 に答える