首页 文章

'dbliteratura()'的多重定义

提问于
浏览
-2

dbliteratura.h:

#ifndef DBLITERATURA_H
#define DBLITERATURA_H
#include <QFile>
#include <QMessageBox>
#include <QSqlQuery>
#include <QSqlDatabase>
#include <QDebug>

void dbliteratura()
{
QString sqlfile = "../dbliteratura.sql";
QFile   f(sqlfile);
if (!f.open(QIODevice::ReadOnly))
    {
        QMessageBox::critical(0, "IO Error", "Couldn't open file" + sqlfile + " for reading");
        exit(1);
    }



QSqlDatabase db = QSqlDatabase::database();
if (!db.isOpen())
    {
        QMessageBox::critical(0, "Database Error", "Database is not open");
        exit(2);
    }

// je to divne, ale neni mozne zpracovat celou sql davku, jednotlive prikazy
// tedy musime oddelit (;) a zadavat postupne
QString sql;
QSqlQuery q;
char z;

db.transaction();
while ( f.getChar(&z) )
    {
        sql = z;
        while (f.getChar(&z) && (z != ';'))  sql.push_back(z);
        q.exec(sql);
    }
db.commit();
}

#endif // DBLITERATURA_H

同时在MainWindow中有这个:

#include "dbliteratura.h"

还有这个:

{
ui->setupUi(this);
this->setWindowTitle("DB Literatura");
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
// db.setHostName("geo102");
// db.setUserName("acarlson");
// db.setPassword("1uTbSbAs");
// bool ok = db.open();

dbliteratura();}

这不是我的代码,我只是这个东西的初学者,但我们在一个项目上一起工作,我需要摆脱问题''dbliteratura()'的多重定义 . 所以,我真的不明白该应用程序中发生了什么 .

1 回答

  • 0
    • 检查dbliteratura.h文件中是否使用Include guard并在必要时添加 .

    #pragma once

    或“旧”版本

    #ifndef DBLITERATURA_H
    #define DBLITERATURA_H
    
    //header  code
    
    #endif /* DBLITERATURA_H */
    
    • 当然,您已在头文件中实现了dbliteratura() . 如果为真,则添加"static" modificator . 请参阅此处的说明What is a “static” function?

    static void dbliteratura();

相关问题