我一直在尝试制作一个随机密码生成器,到目前为止,一切都很顺利,直到我收到此错误,我似乎无法弄清楚: 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;
}
答案 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容器大小的统一方法。