PDA

View Full Version : سوال: error در هنگام استفاده ساخت یک شی از یه کلاس



ravaei
دوشنبه 18 اسفند 1393, 23:42 عصر
درود ...

من یه کلاس دارم به نام دیتا بیس که کل توابعی که واسه دیتابیس دارمو اونجا تعریف کردم یکی از توابع تابع اتصال به دیتا بیس هستش که وقتی تابع رو تو کلاسی که می خوام استفاده کنم می نویسم کار می کنه و درسته ، ولی وقتی همونو تو کلاس دیتا بیسم مینویسم و از اون کلاسم یه شیی میسازم (به صورت اشاره گر ) و می خوام از تابع استفاده کنم نمی تونم .
و error میده ...


C:\Qt\Qt5.3.0\Tools\QtCreator\bin\NaghshAzin\newwo rk_desginer.cpp:116: error: undefined reference to `database::Adddbb(QString, QString, QString, QString, QString)'



و همچنین تابع رو تو database.h قسمت public slots تعریف میکنم ...

این کد فایل databse.cpp :



#include "database.h"
#include <QtSql/QSql>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlError>
#include <QSqlQuery>
#include <QtSql>
#include <QtDebug>
#include <qtableview.h>
#include <newwork_desginer.h>
#include <worklist_desginer.h>



void Adddbb(QString name, QString phonenumber , QString address , QString need , QString details )
{
//connecting to database ...


QSqlDatabase db = QSqlDatabase::addDatabase( "QSQLITE" );
db.setDatabaseName( "./naghshazinSQ.db" );
if( !db.open() )
{
qDebug() << db.lastError();
qFatal( "Failed to connect." );
}
db.setDatabaseName( ":memory:" );


//Insert to database ...


QSqlQuery qry;
qry.prepare( "INSERT INTO tabel1 (name,phonenumber,address,need,details) VALUES (?,?,?,?,?)" );
qry.addBindValue(name);
qry.addBindValue(phonenumber);
qry.addBindValue(address);
qry.addBindValue(need);
qry.addBindValue(details);


if( !qry.exec() )
qDebug() << qry.lastError();
else
qDebug( "Inserted!" );
}

database::database()
{



}






و این database.h :






#ifndef DATABASE_H
#define DATABASE_H






#include <QSqlTableModel>
#include <qstring.h>




class database
{
public slots:
database();
QSqlTableModel * add_row();
QSqlTableModel * delete_row(QString IDname);
void Adddbb(QString Name ,QString Phonenumber ,QString Address ,QString Need ,QString Details);










};


#endif // DATABASE_HA





و این هم جایی که از کلاس نمونه ساختم و از تابع استفاده کردم :




database* a = new database;


a->Adddbb(name,phonenumber,address,need,details);

negative60
سه شنبه 19 اسفند 1393, 00:20 صبح
خوب مشخصه اين طور که شما تابع رو تعريف کرديد عضوی از کلاس نيست تو فايل cpp بايد به اين شکل بنويسيد

void database::Adddbb(QString name, QString phonenumber , QString address , QString need , QString details )
{
}

ravaei
سه شنبه 19 اسفند 1393, 01:25 صبح
خوب مشخصه اين طور که شما تابع رو تعريف کرديد عضوی از کلاس نيست تو فايل cpp بايد به اين شکل بنويسيد

void database::Adddbb(QString name, QString phonenumber , QString address , QString need , QString details )
{
}



ممنون ، امان از دست سی شارپ ... :لبخندساده: