vendredi 6 mars 2015

error: type/value mismatch at argument 1 in template parameter list for ‘template

I have following program named DBAccess.h



#ifndef DBAccess1_HH
#define DBAccess1_HH

#include <iostream>
#include <sqlite3.h>
#include <string>
#include <list>
#include <iterator>
#include <algorithm>
#include <string>
#include <cstring>

using namespace std;

struct InOut_Schedular_Settings
{
string inout_ID;
string inout_FromTime;
string inout_ToTime;
string inout_InOutMode;
};

class sqliteDB {

public:
int rc;
char *zErrMsg;
sqlite3 *db;
const char *sql;
sqlite3_stmt * stmt;

const char* InOut_Schedular_Settings(const char* buffer1,const char* buffer2, const char* buffer3)
{
//====SOME CODE TO ACCESS SQLITE DATABASE====//
}


231 list<InOut_Schedular_Settings> GET_InOut_Schedular_Settings(const char* buffer1)
232 {

238 list<InOut_Schedular_Settings> InOut_Schedular_Settings_list;

int rc = sqlite3_open("/DBsqlite3/empdbv3.db", &db);

sql = "SELECT * FROM InOutTimeM WHERE ID= @ID;";

rc = sqlite3_prepare_v2(db, sql, -1, &stmt, 0);

int Code_x1 = sqlite3_bind_parameter_index(stmt, "@ID");

if(sqlite3_step(stmt)==SQLITE_ROW) {

int column = sqlite3_column_count(stmt);

for(int i = 0; i < column; i++)
{
std::string A = std::string(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0)));
std::string B = std::string(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 1)));
std::string C = std::string(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 2)));
std::string D = std::string(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 3)));

288 InOut_Schedular_Settings info; //Creating list object "info"
289 info.inout_ID = A;
290 info.inout_FromTime = B;
291 info.inout_ToTime = C;
292 info.inout_InOutMode = D;

294 cout<<"Preparing to push data into List"<<endl;
295 InOut_Schedular_Settings_list.push_back(info);
cout<<"Data was pushed successfully"<<endl;
}

}
else {
cout<<"\nERROR while fetching record from the InOutTimeM table[ " << sqlite3_errmsg(db) << " ]" << endl;
}

sqlite3_finalize(stmt);
sqlite3_close(db);

return InOut_Schedular_Settings_list;

}


Program where I called this DBAccess.h is as follows main.cpp



#include <iostream>
#include <sqlite3.h>
#include <stdlib.h>
#include <list>
#include <iterator>
#include <algorithm>
#include <cstring>
#include <unistd.h>
#include <string>
#include <cstdio>
#include <sstream>
#include <cctype>
#include <cstdlib>

#include "DBAccess.h"
using namespace std ;

int main()
{
sqliteDB object1;

const char* value1= "2";

object1.GET_InOut_Schedular_Settings(value1);

cout << "\n\nAll the statement were executed properly\n\n";

return 0;
}


The program when compiled gives following error:



DBAccess.h:231:30: error: type/value mismatch at argument 1 in template parameter list for ‘template<class _Tp, class _Alloc> class std::list’
list<InOut_Schedular_Settings> GET_InOut_Schedular_Settings(const char* buffer1)
^
DBAccess.h:231:30: error: expected a type, got ‘sqliteDB::InOut_Schedular_Settings’
DBAccess.h:231:30: error: template argument 2 is invalid
DBAccess.h: In member function ‘int sqliteDB::GET_InOut_Schedular_Settings(const char*)’:
DBAccess.h:238:31: error: type/value mismatch at argument 1 in template parameter list for ‘template<class _Tp, class _Alloc> class std::list’
list<InOut_Schedular_Settings> InOut_Schedular_Settings_list;
^
DBAccess.h:238:31: error: expected a type, got ‘sqliteDB::InOut_Schedular_Settings’
DBAccess.h:238:31: error: template argument 2 is invalid
DBAccess.h:238:62: error: invalid type in declaration before ‘;’ token
list<InOut_Schedular_Settings> InOut_Schedular_Settings_list;
^
DBAccess.h:288:29: error: expected ‘;’ before ‘info’
InOut_Schedular_Settings info; //Creating list object "info"
^
DBAccess.h:288:33: error: invalid use of non-static member function
InOut_Schedular_Settings info; //Creating list object "info"
^
DBAccess.h:289:4: error: ‘info’ was not declared in this scope
info.inout_ID = A;
^
DBAccess.h:295:34: error: request for member ‘push_back’ in ‘InOut_Schedular_Settings_list’, which is of non-class type ‘int’
InOut_Schedular_Settings_list.push_back(info);


I know, I have to provide typename, and also declare template<>. But unfortunately I am unable to get it right. I would highly appreciate if you could help. Thank you.


Note: I am aware that defining a function in .h file itself is bad practice. I will make another .cpp file later.


Aucun commentaire:

Enregistrer un commentaire