メイン クラスには person オブジェクトがあり、この person クラスには Strategy オブジェクトへのポインターが含まれています。私はこれをやろうとしています:
person.strategyPointer->getStrategyType()
しかし、これを印刷すると、特別な番号 3435973836 が表示されます。これはおそらく、strategyPointer が初期化されていないことを意味します。
Person クラスのヘッダー ファイルで、次のように宣言します。
Strategy* strategyPointer;
そして、Person.cpp ファイルで、このようにポインターを初期化します。
Person::Person()
: strategyPointer(nullptr)
{
}
ポインターを null にポイントすると、なぜコンパイラーは、strategyPointer が初期化されていないと不平を言うのですか? それとも、null を指しているため、範囲外になり、削除されますか? 私は実際に解析しているときにポインターを何かに向けます。私はこのようなことをします:
StrategyType newStrat;
newStrat.setStrategyType(strategyType);
person.strategyPointer = &newStrat
私は継承を使用しており、Strategy は私の基本クラスです。ただし、後でメイン ソース ファイルに戻って初期化について文句を言います。この初期化の問題で何が起こっているのかわかりません。偽の Strategy オブジェクトへのポインターを指すこともできません。
編集: Person ヘッダー ファイル Strategy newStrategy; に新しい変数宣言を追加しました。後で、作成した StrategyType オブジェクトを newStrategy に割り当て、strategyPointer を &newStrategy にポイントします。これにより、作成した StrategyType オブジェクトが範囲外になるのを防ぐことができますよね? しかし、私の main.cpp では、 person.stratPointer->getStrategyType(); を印刷しようとすると、同じ値が得られます。ただし、person.newStrategy.getStrategyType() を出力すると、必要な値が得られます。