Я долгое время изучал Java на С++ с Qt, и у меня много проблем с пониманием того, как работают методы. Прямо сейчас, я пытаюсь выяснить базы данных и попытался упростить мой код с заголовком. Обычно в Java я бы просто получил класс под названием DatabaseControl с методом void, который выполнял бы все, что я хотел. Например, добавление сотрудника в базу данных, как я делаю сейчас. Я бы создавал экземпляр класса, делая что-то вроде
DatabaseControl myDBControl = new DatabaseControl();
а затем выполните метод с
myDBControl.addEmploye();
который приведет к появлению серии полей ввода для пользователя, чтобы ввести информацию о сотруднике - имя, отдел и т.д.
Итак, теперь переходим к С++. У меня есть заголовок
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 должен быть класс /struct/union
Я просмотрел другие экземпляры этой ошибки и не совсем понимаю, что именно не так, и я чувствую, что это происходит из-за моего непонимания методов на С++, потому что я знаю в Java, что-то вроде этого будет работать без проблем (предполагается код в заголовке правильный, что очень хорошо не может быть)