0

これはもっと文体的な質問だと思いますが、統計分布タイプの列挙型を持つクラスがあります(このクラスでのみ使用されます):

Entity {
public:
  enum DistributionType {NORM, UNIFORM_INT, UNIFORM_SPECIFIED, BINOMIAL };
  distributionType ds;
...
}

コンストラクターのパラメーターとして DistributionType 値を作成したい:

Entity salesVolume = new Entity(Entity::DistributionType.NORM);

しかし、これは機能しません (int 値が渡されたときに DistributionType が必要だと思いますか?)

同じクラスの一部である列挙値を持つコンストラクターを呼び出す正しい方法は何ですか? intに型キャストすることでそれを行うことができましたが、これはあまりきつくないようです。クラスから列挙型を除外して、個別に定義することもできます(これは私が見たものです)-それはより一般的な方法ですか?

みんなありがとう

4

3 に答える 3

1

列挙型には「名前空間」がないため、次のものが必要です。

Entity* salesVolume = new Entity(Entity::NORM);

C++11 は、この奇妙さを解決するために「列挙型クラス」または「厳密に型指定された列挙型」を提供します。また、列挙型名を従来の列挙型の「スコープ」として使用できるため、これも実行できます。

Entity* salesVolume = new Entity(Entity::DistributionType::NORM); // C++11 only
于 2012-05-16T06:00:54.947 に答える
1

Entity::NORMまたは、より明示的に (C++11 の場合)として参照できますEntity::DistributionType::Norm

ただし、スタイル上の注意点として、これは Java ではありません。あなたが示したコードは、自動変数(「スタック上」で作成された変数)を使用して、C++でコーディングする自然な方法を使用するよりも遅くなり、メモリリークする可能性があります。newオブジェクトへのポインターを提供するため、コードもコンパイルされません。ただし、代わりに

Entity * salesVolume = new Entity(Entity::NORM);

好む

Entity salesVolume(Entity::NORM);
于 2012-05-16T06:21:13.987 に答える
0

このコードは機能するはずなので、どのようなエラーが発生しているのか教えてください。問題は次のとおりです。

  1. ds を distributionType として定義しましたが、DistributionType (大文字の「D」) である必要があります。
  2. Entity salesVolume = new Entity(Entity::DistributionType.NORM); に置き換える必要があります

Entity *salesVolume = new Entity(Entity::Entity.NORM);

sa;esVolume の前の「*」に注意してください。つまり、ポインタとして宣言する必要があります。

于 2012-05-16T06:19:24.483 に答える