2014-03-05 67 views
0

我有一个类,它有一个标记为显式的std :: string类型的转换运算符。这里是类为什么明确的操作符std :: string不起作用

class MyClass { 

public: 

// methods ...  

    explicit operator std::string() const { 
     // convert to string ... 
    } 
} 

问题是,当我使用类型的变量的static_cast MyClass的我得到的错误“没有配对转换从‘MyClass的’的static_cast来“的std :: string又名......”我似乎有当我为任何自定义类型定义转换运算符时出现同样的问题。显式修饰符只是为了转换为基本类型而定义的,还是另一个编译器错误。

+13

[Works for me](http://ideone.com/bO5g9O)。 SSCCE或它没有发生。 –

+1

@IgorTandetnik'使用namespace std'?耻辱。 – Yakk

+1

使用Clang 3.3编译并运行良好。 – jbruni

回答

0

问题通过更新到最新版本的LLVM,充分支持所有C++ 11特征来解决。

2

下面是一个例子

#include <iostream> 
#include <string> 

class MyClass { 

public: 

// methods ...  

    explicit operator std::string() const { 
     return "Hello World"; 
    } 
}; 


int main() 
{ 
    MyClass obj; 

    std::cout << static_cast<std::string>(obj) << std::endl; 

    return 0; 
} 

输出是

Hello World 
+0

不幸的是,我的编译器似乎不支持非基元类型的这个特性,或者这只是它的另一个错误。当我尝试static_cast时,出现没有转换的错误。 – ALXGTV

+0

@ALXGTV您应该提供一个可以编译的类似示例。 –

+0

当我为基本类型(如int和bool)定义显式转换运算符时,如果我使用像string这样的化合物,那么static_cast将按预期工作,但只有当运算符未标记为显式时才可以使用该转换。 – ALXGTV

相关问题