【问题标题】:method overloading with QString or std::string : call is ambiguous使用 QString 或 std::string 重载方法:调用不明确
【发布时间】:2012-03-02 20:18:52
【问题描述】:

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

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

我重载了drawText() 方法,因为我想接受QStringstd::string

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

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

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

我了解到,编译器无法从 char 数组中决定是 QString 还是 std::string,因为两者都提供了合适的构造函数。

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

【问题讨论】:

  • 您正在使用 QT 为什么不只使用 QString 并远离 std 功能?将 2 个具有相似功能的库结合起来,以后会让你大吃一惊。
  • 我通常只使用 QString,我可以坚持使用它,但我的问题更多是因为好奇。

标签: qt stdstring ambiguous-call


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 2012-06-26
    • 2020-01-09
    • 2011-09-02
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多