【问题标题】:QT: cannot access private member declared in class 'QByteArray'QT:无法访问在类“QByteArray”中声明的私有成员
【发布时间】:2014-08-23 09:23:08
【问题描述】:

我一直在尝试创建一个随机短语生成器,它从一个文本文件中读取名词,从另一个文本文件中读取动词。这一切都奏效了,但现在我正在尝试编写一个将主题的第一个字母大写的方法,但不断收到错误

错误:C2248:“QByteArray::operator QNoImplicitBoolCast”:无法访问在“QByteArray”类中声明的私有成员

参见 'QByteArray::operator QNoImplicitBoolCast' 的声明

参见“QByteArray”的声明

我将发布该方法的代码(对不起,如果格式不正确,我是新手)

    void MainWindow::returnCap(QString sub){

        char *str;
        QByteArray ba;
        ba = sub.toLatin1();
        str = ba.data();
        QString firstLetter;
        firstLetter = str[0];
        QString cappedFirstLetter;
        cappedFirstLetter = firstLetter.toUpper();
        char flc; //firstLetterChar
        flc = cappedFirstLetter.toLatin1();
        str[0] = flc;
    }

感谢您的帮助!

【问题讨论】:

  • 你在哪里得到错误?在哪一行?
  • flc = cappedFirstLetter.toLatin1();
  • toLatin1 返回 QByteArray...您必须使用 .data 或 char 将其转换为 char*
  • @ArcWalrus,您想将字节数组分配给字符吗?嗯……
  • 如果你想让sub的第一个字母大写,为什么不简单地做sub[0] = toupper(sub[0])呢?此外,您正在传递sub 按值,因此您只是在修改一个副本。

标签: c++ qt char qbytearray toupper


【解决方案1】:

问题在于您将字节数组分配给单个字符。但是,您只需要字节数组中的一个字符:

char flc; //firstLetterChar
flc = cappedFirstLetter.toLatin1()[0];

更新:

我会通过以下方式解决您的问题:

QChar c1 = sub[0];
c1 = c1.toUpper();
sub.replace(0, 1, c1);

【讨论】:

    【解决方案2】:

    你调用成员函数toLatin1,它返回一个QByteArray。然后将此QByteArray 对象分配给char 变量(不是char*,只是char)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-20
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      • 2013-07-17
      相关资源
      最近更新 更多