2016-11-16 10 views
9

変換演算子を使用してクラスをstringとchar *にしようとしていますが、これは文字列を作成しようとすると曖昧な呼び出しエラーになります。C++演算子stringとchar *があいまいなエラーを起こす

class A 
{ 
public: 
A(){}; 
operator const char*() const { return "a" }; 
operator const string() const { return "b" }; 
} 

と以下の主なプログラム:

int main() 
{ 
A a; 
string b = string(a); 
return 0; 
} 

この原因あいまいなコールエラーのbasic_stringに(&) はまた、以下を試してみました:

class A 
{ 
public: 
A(){}; 
operator const char*() const { return "a" }; 
explicit operator const string() const { return "b" }; 
} 

int main() 
{ 
A a; 
string b = static_cast<string>(a); 
return 0; 
} 
は、私は、次のクラスがあると

これは同じエラーを引き起こします。私は両方の演算子を自分のコードに入れておく必要があります。どうすればいいのですか?

注:使用して、文字列B =作品が、私はaswell

ノート2動作するように(a)の形式の文字列を必要とする:明示的なkeyworkを使用しないとあなたはそれらの両方explicitようにする必要があり演算子=曖昧

+2

@Sergeyここでローカル変数を見つけることはできませんか? –

+0

[関連](https://stackoverflow.com/questions/3518145/c-overloading-conversion-operator-for-custom-type-to-stdstring) –

+0

@πάνταῥεῖああ、はい、それはデータセグメントにコンパイルする必要があります。 – Sergey

答えて

2

になりますがstatic_cast

class A 
{ 
public: 
    A(){}; 
    explicit operator const char*() const { return "a"; }; 
    explicit operator const string() const { return "b"; }; 
}; 

int main() 
{ 
    A a; 
    string b = static_cast<string>(a); // works, b now has "b" as value 
    const char * c = static_cast< const char *>(a); // works too, c now has "a" as value 
    return 0; 
} 
関連する問題