![](/img/trans.png)
[英]Error 22 error C2228: left of '.size' must have class/struct/union
[英]Error: C2228: left of '' must have class/struct/union
我有很长时间的Java用户使用Qt学习C ++,但在理解方法的工作方式时遇到了很多麻烦。 现在,我正在尝试找出数据库,并尝试使用标头简化我的代码。 通常,在Java中,我只有一个名为DatabaseControl的类,该类具有可以执行我想要执行的操作的void方法。 例如,像我现在所做的那样,将一个雇员添加到数据库中。 我会通过做类似的事情来实例化课程
DatabaseControl myDBControl = new DatabaseControl();
然后执行
myDBControl.addEmploye();
这将弹出一系列输入框,供用户输入有关员工的信息-姓名,部门等。
因此,现在转到C ++。 我有我的标头
class DatabaseControl
{
public:
DatabaseControl();
~DatabaseControl();
//Methods
void addEmployee();
};
我的构造函数中没有任何参数,因为我想要做的就是在主程序中调用“ addEmployee”方法,如上所示。 在同一个头文件中,我在类声明下面
void DatabaseControl::addEmployee(){
QSqlQuery qry;
bool ok;
QString firstName = QInputDialog::getText(NULL, "QInputDialog::getText()",
"Employee first name:", QLineEdit::Normal,
NULL, &ok);
if (ok && !firstName.isEmpty()){}
else{
QMessageBox msgBox;
msgBox.setWindowTitle("Error");
msgBox.setText("Failed to add employee.\nReason: No employee name given.");
msgBox.exec();
}
QString lastName = QInputDialog::getText(NULL, "QInputDialog::getText()",
"Employee last name:", QLineEdit::Normal,
NULL, &ok);
if (ok && !lastName.isEmpty()){
qry.prepare("INSERT INTO employees (firstname, lastname)" "VALUES (:f1, :f2)");
qry.bindValue(":f1", firstName);
qry.bindValue(":f2", lastName);
qry.exec();
}
else{
QMessageBox msgBox;
msgBox.setWindowTitle("Error");
msgBox.setText("Failed to add employee.\nReason: No employee name given.");
msgBox.exec();
}
}
然后在我的主要我有:
void MainWindow::on_addEmployee_clicked()
{
DatabaseControl myDBControl();
myDBControl.addEmployee();
}
我希望它只运行我在头文件中编写的addEmployee方法。 但是,当我编译时,出现错误错误:C2228:“。addEmployee”的左侧必须具有class / struct / union
我查看了此错误的其他实例,但并没有真正确切地了解出了什么问题,而且我认为这是由于我对C ++中的方法的误解所致,因为我知道在Java中类似的东西可以正常工作(假定代码在标头是正确的(很可能不是)
DatabaseControl myDBControl();
应该
DatabaseControl myDBControl;
您需要这样说:
DatabaseControl myDBControl;
myDBControl.addEmployee();
支持接受的答案。
来自dcl.init#11 :
一个其初始值设定项是一个空括号集合(即()
应进行值初始化。
[注意:由于初始化程序的语法不允许
()
,X a();
不是
class X
对象的声明 ,而是不带参数并返回X的函数的声明 。 某些其他初始化上下文([expr.new],[expr.type.conv],[class.base.init])中允许使用()
形式。 —尾注]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.