使用QString或std :: string重载方法:call是不明确的

时间:2012-02-10 10:44:17

标签: qt stdstring ambiguous-call

我有一个看起来像这样的课程:

class MyClass {
public:
    void drawText(const QString& rText);
    void drawText(const std::string& rText);
};

我重载了drawText()方法,因为我想接受QString以及std::string

但是当我写这样的东西时:

MyClass foo;
foo.drawText("Hello");

编译器抱怨对drawText()的调用不明确。

我理解,从char数组中,编译器无法在QStringstd::string之间做出决定,因为两者都提供了合适的构造函数。

但有没有办法确保用户可以通过传递drawText()QString或char数组来使用std::string方法?

1 个答案:

答案 0 :(得分:2)

要回答您的问题,是:添加另一个需要const char*

的重载

const char*到QString的隐式转换是有问题的,因为它假定输入是ASCII。我怀疑Qt人们想要完全删除该构造函数,但它会破坏源兼容性。如果要在应用程序中禁用它,可以定义QT_NO_CAST_FROM_ASCII。