1

申し訳ありませんが、これをコード化する時間がありません。説明が十分に徹底されていることを願っています。私のクラスの 1 つは、プライベート メンバー変数としてベクトルを持ち、そのサイズはそのコンストラクターで宣言されています。

さて、デバッグから、ベクトルはコンストラクターで割り当てられたサイズを取得しますが、コンストラクターが戻るとすべてが失われることがわかりました (あたかもベクターがメンバー変数の 1 つ. 空のベクターに戻ります) コンストラクターの実行後もベクターのサイズを保持する必要があり、この問題を修正するために何ができるか疑問に思っていました.私の他の機能の1つ。

コメントからのコンテンツの追加

std::vector< std::vector< std::string > > routeInfo(
    routeNum, std::vector< std::string >( 2 ) );

これは私のコンストラクターでのベクトルの宣言です。routeNum は、コンストラクターで以前に初期化された変数です (正しく初期化されましたが、それは問題ではありません)。

4

2 に答える 2

3

あなたのコードから、C ++でメンバー変数を初期化する方法を知らないと仮定する必要があります。これは正しい方法です:

class Myclass
{
// the declaration of the variable:
std::vector< std::vector< std::string > > routeInfo;

// declaration of the constructor:
Myclass(int routeNum);
};

// definition of the constructor
Myclass::Myclass(int routeNum)
  : routeInfo(routeNum, std::vector< std::string >( 2 ))
{
  // some other code
}

単純に書くと:

Myclass::Myclass(int routeNum)
{
std::vector< std::vector< std::string > > routeInfo(
    routeNum, std::vector< std::string >( 2 ) );
}

これにより、別の routeInfo 変数が作成され、コンストラクターでオリジナルが隠されます。メンバー変数に到達するには、this->routeInfo代わりに書く必要がrouteInfoあり、それはまだゼロの長さになります。

于 2012-08-10T16:26:20.530 に答える
0

コードのどこかでベクトルを何らかの形で割り当てているように思えます(または、ベクトルのサイズを指定しなかった別のオブジェクトを使用してオブジェクト全体を割り当てている可能性があります)。

サイズを正しく指定した場合、ベクトル自体のサイズは変更されません。確認することが1つありますが:

最大容量を指定しましたか、それとも予約を使用して現在の容量を指定しましたか? reserve を呼び出すと、ベクトルは割り当てられたスペースまで拡張され、それを超えるかサイズの変更を明示的に要求するまでそこにとどまります。

于 2012-08-10T16:05:09.540 に答える