0

別のクラスへのポインターの配列を保持することになっているプラ​​イベート変数を持つクラスがある場合、次の構文は正しいですか?

class MyClass
{
    private:
        int arraySize;
        SomeOtherClass* classPtr[];
}

後で、ifstream を受け入れ、ファイルから読み取り、配列を埋める MyClass の関数で、この配列にメモリを動的に割り当てたい場合、次のようにしますか?

void createArray(std::ifstream& fin)
{
    //the first int is the array size
    fin >> arraySize;
    string tempString; //the file is formatted string int string int etc.
    int tempInt;

    classPtr[arraySize];

    for(int i = 0; i < arraySize; i++)
    {
        fin >> tempString;
        fin >> tempInt;
        //assume the constructor is defined
        classPtr[i] = new SomeOtherClass(tempString, tempInt);
    }

お時間をいただきありがとうございます。

4

2 に答える 2

2

それは正しくありません。C++ ではまだ可変長配列を使用できません

そうあるべき

SomeOtherClass** classPtr;

そして、createArray()

...
classPtr = new SomeOtherClass*[arraySize];
...

そして、はい、私が言ったことをすべて忘れて使用してくださいstd::vector

于 2013-02-13T02:46:43.480 に答える
0

配列はコンパイル時に静的サイズでなければなりませんが、あなたの場合、実行時にストリームから読み取るまでサイズがわかりません。動的サイズの配列の場合は、vector代わりにa を使用する必要があります。

std::vector<SomeOtherClass*> classPtr;

次に、以下のコードで:

classPtr.reserve(arraySize);
.....
classPtr.push_back(new SomeOtherClass(...));

ただし、ベクター内で生のポインターを使用することは推奨されておらず、注意して行う必要があります。この回答を読んで、それについての詳細と、それがあなたに適しているかどうかを確認してください。vectorほとんどの場合、オブジェクトが必要なだけです。

std::vector<SomeOtherClass> vec;
.....
vec.push_back(SomeOtherClass(...));

オブジェクトの を使用するときはvector、オブジェクトの移動/コピー セマンティクスについて考え、ユース ケースに適していることを確認する必要があります。

于 2013-02-13T02:49:08.303 に答える