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

时间:2015-04-28 09:43:57

标签: c++ qt

我要从数据库中删除记录并再次创建它。我有两个源类, 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 Tables'未在此范围内声明 我添加了这一行:bool createDBTables();而不是createDBTables();但是,它警告我未使用的变量,如何以正确的方式使用此功能?当我在MainWindows.cpp中声明createDBTables()时,它警告我有关函数的重复定义。

1 个答案:

答案 0 :(得分:1)

快速回答:

您应该创建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中编写实用程序函数。实用程序功能属于实用程序单元。