0

プライベートメンバー変数にしたい配列があります。選択ソートの実装として私のプログラムが機能する方法は、main メソッドが配列のサイズをフィードし、コンストラクターが渡され、指定されたサイズの新しい配列を作成することです。

私はJavaでやりましたが、C++では理解できません。(この Web 上の他の人の投稿を見た後、変数を静的にする必要があることがわかりました)

ありがとうございました。

[配列S.h]

public:
    ArrayS(void);
    ArrayS(int max);
    ~ArrayS(void);

private:
        static long a [0];  

[ArrayS.cpp]

ArrayS::ArrayS(void)
{

}

ArrayS::ArrayS(int max)
{
    long ArrayS::a [max];                 
    nElems = 0; 
}

ありがとうございました。

4

2 に答える 2

1

上記のコードには 2 つの問題があります。1 つ目は、C++ ではサイズ 0 の配列を持つことができないことです。2 つ目は、クラスの静的メンバーの場合、正確に 1 つの翻訳単位で定義を提供する必要があることです。

struct test {
   static long a[10];
};
// in a single .cpp
long test::a[10] = {};

それ以外に、実行時にしか分からないサイズの配列が必要な場合は、生の配列を使用できません。(を介して)動的に割り当てられたメモリを使用できますが、を使用new[]する方が適切ですstd::vector<long>。さらに、メンバーが本当に必要かどうかも不明ですstatic。そのコンテキストのstaticキーワードは、クラス メンバーを意味します(つまり、インスタンスごとのデータではなく、プログラム内のすべてのコードで共有されます)。

于 2013-03-19T21:53:12.557 に答える
0

クラスの外で変数を再度定義する必要があります。静的メンバーがあるときはいつでも。g++ は、サイズがゼロの配列を持つ c++ コードをコンパイルしますが、それが本当に必要かどうかを再検討してください。

于 2013-03-20T18:56:02.900 に答える