Qt-'createD Tables'未在此范围内声明

Qt- 'createD Tables' was not declared in this scope

本文关键字:范围内 声明 Tables createD Qt-      更新时间:2023-10-16

我要从数据库中删除记录并再次创建它。我有两个源代码类,Main.cpp和MainWindows.cpp

Main.cpp 中,我定义了一个名为 createDBTables() 的函数

bool createDBTables()
{
    QSqlQuery query;
    query.exec("DROP TABLE contacts");
    return query.exec("CREATE TABLE contacts ("
                "id INTEGER PRIMARY KEY AUTOINCREMENT, "
                "name VARCHAR(256) NOT NULL, "
                "status VARCHAR(1024), "
                "profpic VARCHAR(256), "
                "register_state INTEGER NOT NULL, "
}

我在 Main 中声明了这个函数.cpp因为我想在这个源文件中使用它,我也想在另一个源文件中使用这个函数 - MainWindow.cpp-
我尝试使用它:

void MainWindows::showAccountDeactivation()
{
    QMessageBox msgBox(this);
    QFont font = msgBox.font();
    msgBox.setWindowTitle(CGlobalZone::m_softwareName);
    msgBox.setInformativeText(tr("Are you sure you want to remove your account?"));
    msgBox.setStandardButtons(QMessageBox::Ok| QMessageBox::Cancel);
    msgBox.setDefaultButton(QMessageBox::Cancel);
    msgBox.setButtonText(QMessageBox::Ok , tr("Ok"));
    msgBox.setButtonText(QMessageBox::Cancel , tr("Cancel"));
    int ret = msgBox.exec();
    switch (ret)
    {
       case QMessageBox::Ok:
        {
             createDBTables();
        }
            break;
        case QMessageBox::Cancel:
            QTimer::singleShot(1500, this, SLOT(close()));
            break;
    }
}


但它向我展示了这一点:
"createD 表"未在此范围内声明我添加了这一行:
bool createDBTables();而不是createDBTables();但是,它警告我未使用的变量,如何以正确的方式使用这个函数? 当我在 MainWindows 中声明 createDBTables() 时.cpp它警告我函数的重复定义。

快速回答:

您应该创建Main.h文件,其中包含:

#ifndef MAIN_H
#defing MAIN_H
bool createDBTables();
#endif // MAIN_H

并将其包含在Main.cppMainWindow.cpp文件的开头:

#include "Main.h"
...

解释:

C++中的每个实体都必须有一个定义,并且最多可以有多个声明。您在Main.cpp文件中编写的内容是一个定义。声明用于让编译器知道,此实体是在本单元或其他单元(如您的情况)的下方某处定义的。如果没有声明,编译器甚至不知道你的函数是否存在。这正是错误字符串中写入的内容。

如果想要了解更多信息,应阅读有关编译器和链接器工作原理的信息。

p.s.:我也同意Bowdzone的观点。您不应该在 main.cpp 中编写实用程序函数。公共设施函数属于公共设施单位。