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 を 2 番目の引数として使用したいのですが、num num n; 型の引数です。toInt("2",n); これにより、コンパイル エラーが発生します。

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

キャストを使用しようとしましたtoInt("2",(num)n);が、まだ問題があります どうすれば問題を解決できますか?

4

2 に答える 2

1

無効な列挙型に署名するための新しい列挙型を追加することをお勧めします。例:

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

署名をintではなくnumに変更します。

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 に答える
1

型の値は でnumはないため、関数に渡す前にint一時型に変換する必要があります。intテンポリは非 const 参照にバインドできません。


経由で変換する場合intは、次の 2 つの手順で変換する必要があります。

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