3

私は次のコードを持っています:

class mph {
public:
enum minute_periods {five, ten, fifteen, thirty}; 
   std::vector<minute_periods> factors;
  minute_periods fac;

void setUpFactors(void) { 
    factors.resize(4);
    factors[five] = 5;
    factors[ten] = 10;
    factors[fifteen] = 15;
    factors[thirty] = 30;
  }

次のエラーが発生します。

error: invalid conversion from ‘int’ to ‘mph::minute_periods’

どうすれば修正できますか?

4

6 に答える 6

3

intは暗黙的にsにキャストされません。明示的にキャストするenum必要があるため、エラーが発生します。このコードはあなたが望むことをすることはないと思いますが、あなたはこのようなものを望んでいるようです。

    std::map<minute_periods, int> factors;

そうすれば、ベクトルfactors[five]のようにではなく、intが得られます。enumあなたのコードから、値5、10、15、30があなたenumの範囲(0から3)の外にあるので、これがあなたが望むものだと推測しています。

于 2012-04-13T18:26:55.767 に答える
2

C ++では、からを暗黙的にキャストできますが、enumそのint逆はできません。明示的なキャストを使用してこれを修正できます。

factors.resize(4);
factors[five] = minute_period(5);
factors[ten] = minute_period(10);
factors[fifteen] = minute_period(15);
factors[thirty] = minute_period(30);

お役に立てれば!

于 2012-04-13T18:25:01.587 に答える
1

enumをintに変換することはできますが、intをenumに変換することはできません。ベクトルはminute_periodsのリストであるため、因子には分周期のみを割り当てる必要があります。あなたはおそらくしたい

factors[five] = five;
factors[ten] = ten;
factors[fifteen] = fifteen;
factors[thirty] = thirty;

それはあなたのコンパイルエラーを解決します。

于 2012-04-13T18:27:14.120 に答える
1

コードにより、そのエラーが2か所で生成されます。

  • enumのインデックスとして値を使用する場合vector
  • enumそのベクトルの値として値を使用する場合

あなたの論理には欠陥があります。vector常に整数でインデックス付けされます。ワイルドな推測はあなたが望んでいたことでしょうが、考え直してみるとmap<minute_period, int>、これは意味がありません。

enum値を整数として使用するには、次のようにします。

enum minute_periods 
{
    five = 5, 
    ten = 10, 
    fifteen = 15, 
    thirty = 30
}; 

enumこれは、値を整数として使用する正しい方法です。ラベルを値に変換する愚かなデータ構造ではありません。

于 2012-04-13T18:28:57.357 に答える
0

mapnotを使用したいvector。保存しているのは列挙型から整数へのマップであるように見えるので、minute_periods

class mph {
public:
enum minute_periods {five, ten, fifteen, thirty}; 
   std::map<minute_periods, int> factors;

void setUpFactors(void) { 
    factors[five] = 5;
    factors[ten] = 10;
    factors[fifteen] = 15;
    factors[thirty] = 30;
  }
};

また、列挙値を明示的に設定するだけでもかまいません。

class mph {
    public:
    enum minute_periods {five = 5, ten = 10, fifteen = 15, thirty = 30}; 
};
于 2012-04-13T18:33:20.757 に答える
0

std::vector<unsigned int> factors;あなたはそれをそのようにしたいかのようにあなたのベクトルを宣言する必要があります。ベクトルを介して列挙型を別の値に変換する場合、ベクトルの値型は変換先の型である必要があります。ルックアップは、暗黙的な変換により、列挙型をインデックスとして使用して実行できます。

また、列挙値のリストの最後のエントリとしてカウント列挙値を定義することをお勧めします。ハードコードされたサイズを置き換えることができます。

于 2012-04-13T18:32:35.830 に答える