错误:C2228:x27的左侧';必须具有类/结构/联合 我是一个长时间的java用户,学习QT和C++,我很难理解方法是如何工作的。现在,我正试图找出数据库,并试图用一个标题简化我的代码。通常在Java中,我只需要一个名为DatabaseControl的类,它带有一个void方法,可以执行我想要的任何东西。例如,将员工添加到数据库,就像我现在所做的那样。我将通过如下操作实例化该类 DatabaseControl myDBControl = new DatabaseControl();

错误:C2228:x27的左侧';必须具有类/结构/联合 我是一个长时间的java用户,学习QT和C++,我很难理解方法是如何工作的。现在,我正试图找出数据库,并试图用一个标题简化我的代码。通常在Java中,我只需要一个名为DatabaseControl的类,它带有一个void方法,可以执行我想要的任何东西。例如,将员工添加到数据库,就像我现在所做的那样。我将通过如下操作实例化该类 DatabaseControl myDBControl = new DatabaseControl();,c++,qt,sqlite,C++,Qt,Sqlite,然后使用 myDBControl.addEmploye(); 这将打开一系列输入框,供用户输入有关员工的信息-姓名、部门等 所以现在转到C++。我有头球 class DatabaseControl { public: DatabaseControl(); ~DatabaseControl(); //Methods void addEmployee(); }; 我的构造函数中没有任何参数,因为我所要做的就是调用main中的“addEmployee”方法,如上所

然后使用

myDBControl.addEmploye();
这将打开一系列输入框,供用户输入有关员工的信息-姓名、部门等

所以现在转到C++。我有头球

class DatabaseControl
{
public:
    DatabaseControl();
    ~DatabaseControl();

    //Methods
    void addEmployee();
};
我的构造函数中没有任何参数,因为我所要做的就是调用main中的“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;
 myDBControl.addEmployee();

您在此处出错:

DatabaseControl myDBControl();
您声明了一个名为
myDBControl
的函数,该函数不带任何参数,并返回一个
DatabaseControl

没有任何构造函数参数的对象声明必须省略
()


这与“”有关(但并不确切地说),因为它是由相同的语言规则造成的,即如果语句可以被解析,那么它们就是函数声明。

支持接受的答案

发件人:

初始值设定项为空括号集的对象,即
()
,应进行值初始化

[ 注意:由于初始化器的语法不允许使用
()

X a();
不是类X的对象的声明,而是 不带参数并返回X的函数声明。在某些其他初始化上下文中允许使用
()
形式 ([expr.new]、[expr.type.conv]、[class.base.init])- 尾注 ]


我注意到了这就是为什么我会问这个问题。“LayTim:这不是一种有效的或有成效的学习语言的方法。要有系统地做。(虽然几天前你被其他人所遮蔽,但他注意到Python和C++都有一个关键词:代码<代码<代码>,而且愤怒的是,在两种语言中都没有做同样的事情。)@KerrekSB:我,确切地说…@JoachimPileborg:这不是最麻烦的解析,尽管它是相关的。我问它的原因是引用Java是为了确切地解释我想做什么,因为我不确定我是否正确地使用了它,我想看看如何做同样的事情(或类似的事情)在C++中,我从未声称java和C++是相似的。
DatabaseControl myDBControl;
X a();