.size()的左边必须有class / struct / union

时间:2016-06-05 23:39:43

标签: c++ arrays qt

我一直在尝试制作一个随机密码生成器,到目前为止,一切都很顺利,直到我收到此错误,我似乎无法弄清楚: left的大小必须有class / struct / union 我环顾四周,人们有类似的问题,但我似乎找不到我的解决方案。 任何帮助都会受到赞赏。

void MainWindow::on_pushButton_2_clicked()
    {
        QString password;

        QString letters[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
        QString special[] = {'!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '-', '+', '=', '/', '?', '>', '<', '\'', '\"', ';', ':', '`', '~'};
        int numbers[] = {1,2,3,4,5,6,7,8,9,0};

        int length = ui->horizontalSlider_2->value();
        bool douppercase = ui->checkBox_2->isChecked();

        for(int i = 1; i <= length; i++) {
            int selection = roll(1, 3);
            qDebug() << selection;
            QString selectedletter;
            int lettercase;
            int letter;
            switch(selection) {
                case 2:
                    letter = roll(0, special.size());
                    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                    password += special[letter];
                break;
                case 3:
                    letter = roll(0, numbers.size());
                    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                    password += numbers[letter];
                break;
                default:
                    letter = roll(0, letters.size());
                    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                    selectedletter = letters[letter];
                    if(douppercase)
                        lettercase = roll(1, 2);
                        if(lettercase == 1)
                            selectedletter.toLower();
                        password += selectedletter;
                break;
            }
        }

        ui->lineEdit->setText(password);
    }

    int MainWindow::roll(int min, int max) {
        int randNum = rand()%(max-min + 1) + min;
        return randNum;
    }

3 个答案:

答案 0 :(得分:4)

UPDATE `oc_product` SET `image`= 'no_image.png' WHERE `image` IS NULL;

letter = roll(0, special.size()); special是数组。阵列没有方法。他们没有班级成员,他们只是阵列。

您可能正在寻找:

letters

同样为sizeof(specials)/sizeof(specials[0])

答案 1 :(得分:0)

您声明的数组(字母/特殊/数字)是C类型数组。他们没有函数或成员变量 - 它们只是QStrings的数组。

如果你想要一个包装数组的类,那么看看std :: vector和std :: array

或者,您可以通过以下方式以编程方式确定数组的大小: sizeof(字母)/ sizeof(QString)

答案 2 :(得分:0)

您无法为数组调用.size。相反,您可以针对给定数组执行以下操作之一,例如arr

sizeof(arr) / sizeof(arr[0])

std::end(arr) - std::begin(arr)

并且在C ++ 17中,可以使用:

std::size(arr)

后者是获取数组和其他stl容器大小的统一方法。