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 不会隐式转换为enums,您必须明确地执行此操作,这就是您收到错误的原因。我不认为这段代码会做你想做的事,但是看起来你想要这样的东西。

    std::map<minute_periods, int> factors;

这种方式factors[five]会给你一个int,而不是enum像vector那样。我从您的代码中猜测这就是您想要的,因为值 5、10、15 和 30 超出了您enum的范围(从 0 到 3)。

于 2012-04-13T18:26:55.767 回答
2

在 C++ 中,您可以从 an 隐式enum转换为 an 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值作为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 回答
1

您只能将枚举转换为整数,而不能将整数转换为枚举。由于您的向量是 minute_periods 的列表,因此您应该只将分钟周期分配给因子。你可能想要

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

这将解决您的编译错误。

于 2012-04-13T18:27:14.120 回答
0

你需要声明你的向量,就std::vector<unsigned int> factors;好像你想那样做。如果您通过向量将枚举转换为不同的值,则向量的值类型应该是您要转换的类型。可以通过隐式转换将枚举作为索引进行查找。

我还建议将计数枚举值定义为枚举值列表中的最后一个条目。它可以替换硬编码的大小。

于 2012-04-13T18:32:35.830 回答
0

你想使用 amap而不是 a 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 回答