1

我有以下代码:

typedef enum {Z,O,T} num;
bool toInt (str s,int& n);//<-if convert is possible converts s to integer ,puts the result in n and returns true,else returns false

我想使用toIntfunction 和 transfer 作为第二个参数,类型为 num num n 的参数;toInt("2",n); 这会导致编译错误。

cannot convert parameter 2 from 'num' to 'int &'

我尝试使用演员表:toInt("2",(num)n);但它仍然有问题 我该如何解决这个问题?

4

2 回答 2

1

type 的值num不是int,因此int在传递给函数之前必须将其转换为临时值。临时对象不能绑定到非常量引用。


如果要通过 转换int,则必须分两步进行转换:

int temp;
toInt("2", temp);
num n = static_cast<num>(temp);
于 2012-11-24T22:26:23.690 回答
1

我建议,您添加一个新的枚举类型来签署无效枚举,例如:

enum num {Z,O,T,Invalid=4711} ;//no need to use typedef in C++

并将签名更改为 num 而不是 int:

bool toInt (str s, num& n)
{
 if ( s=="Z" ) n=Z; 
 else if ( s=="O" ) n=O;
 else if ( s=="T" ) n=T;
 else { n=Invalid; return false; }
 return true;
}

问候

于 2012-11-24T22:35:01.950 回答