Hi I have problem with class objects and maybe You can solve it. That is my code:
Plugin.h:
class DemandPlugin
{
public:
QString sendtodb(QSqlDatabase &db, QString &cache, QString function);
QSqlDatabase db;
DemandPlugin();
virtual ~DemandPlugin();
};
Plugin.cpp:
DemandPlugin::DemandPlugin()
{
if (!db.open())
{
GlobalLog::log("SqlSource", "ERROR: Cannot connect to db!");
}
this->selectedPath = QString::null;
/*
here are things which I don't want to show You, sorry ;)
*/
}
QString DemandPlugin::sendtodb(QSqlDatabase &db, QString &cache, QString function)
{
QSqlQuery query(function,db);
query.next();
cache = query.value(0).toString();
return cache;
}
DemandPlugin::~DemandPlugin() { }
These two files above are propably ok, they are located in one location in my project (Project/Subs/Demands/plugin.h , Project/Subs/Demands/plugin.cpp). The problem is with the third one. This file, called task.cpp is in loaction Project/Api/capi/task.cpp.
I want to use class object which is defined in "plugin" but it returns error: 'undefined reference to 'DemandPlugin::sendtodb(QSqlDatabase&, QString&, QString)'.
#include "../../Subs/Demands/plugin.h"
DemandPlugin *demand_plugin = new DemandPlugin();
double Task::getTotalCost()
{
//return (costCoef * cost + baseCost) * waitCoef;
// //
QString hostname = GlobalConfig::getValue("dbCredentials.ini", "database/host").toString();
QString database = GlobalConfig::getValue("dbCredentials.ini", "database/db_name").toString();
QString username = GlobalConfig::getValue("dbCredentials.ini", "database/user").toString();
QString password = GlobalConfig::getValue("dbCredentials.ini", "database/password").toString();
QString connectionName = QString::number((int)this, 16);
QSqlDatabase db;
db = QSqlDatabase::addDatabase("QPSQL", connectionName);
db.setHostName(hostname);
db.setDatabaseName(database);
db.setUserName(username);
db.setPassword(password);
QString Worker_Name = GlobalConfig::getValue("cloud.ini", "name").toString();
QString tbname;
QString value;
double infinity = std::numeric_limits<float>::infinity();
QList <QString> tagnamevalue_tag;
double new_cost;
if(Worker_Name.contains("Luke") ==true)
{
QString line1 = "SELECT TAGS FROM TEST WHERE SUITE_ID = '"+ getParam("subs_test_id") +"'";
tagnamevalue_tag = demand_plugin->sendtodb(db, value, line1).split(" ");
QString part_of_query;
for (int q=0; q<tagnamevalue_tag.count(); q++)
{
part_of_query = part_of_query +"AND tags LIKE '%"+tagnamevalue_tag[q]+"%'";
}
QString line3 = "UPDATE Test SET selected = 'YES' WHERE id = (SELECT id FROM Testbays WHERE name LIKE '%Luke%' AND selected='NO'"+part_of_query+" ORDER BY id LIMIT 1) RETURNING name;";
tbname = demand_plugin->sendtodb(db, value, line3);
if(tbname == NULL)
{
new_cost = infinity;
}
else
{
new_cost = (costCoef * cost + baseCost) * waitCoef;
}
}
return new_cost;
}