【发布时间】:2014-01-19 05:00:55
【问题描述】:
我是一名长期使用 Qt 学习 C++ 的 Java 用户,但我在理解方法的工作原理时遇到了很多麻烦。现在,我正在尝试找出数据库,并尝试使用标题来简化我的代码。通常在 Java 中,我只有一个名为 DatabaseControl 的类,它带有一个 void 方法,可以执行我想要的任何操作。例如,将员工添加到数据库中,就像我现在正在做的那样。我会通过做类似的事情来实例化这个类
DatabaseControl myDBControl = new DatabaseControl();
然后执行该方法
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 方法。但是,当我编译时,我收到错误 Error: C2228: left of '.addEmployee' must have class/struct/union
我查看了此错误的其他实例,但并没有真正理解到底出了什么问题,我觉得这是因为我对 C++ 中的方法的误解,因为我知道在 Java 中这样的事情可以毫无问题地工作(假设标题中的代码是正确的,但很可能不是)
【问题讨论】:
-
我注意到了,这就是我问这个问题的原因。
-
@Lighthat:这不是一种高效或高效的语言学习方式。系统地去做。 (尽管你在几天前发现 Python 和 C++ 都有一个关键字
int并且对它在两种语言中没有做同样的事情感到愤怒。) -
@KerrekSB:我wouldn't say he was "furious",正是……
-
@JoachimPileborg:这不是最令人烦恼的解析,尽管它是相关的。
-
我之所以问它并提到 Java,是为了准确解释我想要做什么,因为我不确定我的措辞是否正确,我想看看如何做C++ 中相同的东西(或类似的东西),我从未声称 Java 和 C++ 是相似的。