データメンバーが32ビットの符号なし整数のみであるクラスがあります。つまり、クラスは次のようになります。
class A {
protected:
unsigned int bits;
/* ... some methods ... */
public:
/* ... some methods ... */
};
ただし、32ビットの符号なし整数との間で暗黙的に変換できるようにする必要もあります。そこで、コピーコンストラクターとキャスト演算子を追加しました。
class A {
protected:
unsigned int bits;
/* ... some methods ... */
public:
A(): bits(0) {} // default constructor
A(const unsigned int i): bits(i) {} // convert from unsigned int to A
operator unsigned int() { return bits; } // convert from A to unsigned int
/* ... some methods ... */
};
たとえば、次のことができます。
int main () {
// default constructor
A a0 = A();
// convert from unsigned int
A a1 = 1 + 2;
// conversions between the two types:
unsigned int result = (a0 & a1 + 5) / 2;
}
しかし、私はそれを型で動作させるのに苦労していconst
ます。特に、以下は機能しません。
int main () {
const A a = 5; // works
unsigned int i = a; // compiletime error
}
「'constA'から'unsignedint'への適切な変換関数は存在しません。」と書かれています。マイクロソフトが提供するデフォルトのコンパイラでVisualStudio2010を使用しています。
正しく機能させるには、どのような変換関数を作成する必要がありますか?