错误:"模板<类_Tp、类_Alloc>类 std::list"的模板参数列表中参数 1 的类型/值不匹配

error: type/value mismatch at argument 1 in template parameter list for ‘template<class _Tp, class _Alloc> class std::list’

本文关键字:参数 列表 不匹配 类型 gt Tp lt 模板 Alloc list std      更新时间:2023-10-16

我有一个名为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;
   }

我调用这个DBAccess.h的程序如下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 << "nnAll the statement were executed properlynn";
    return 0;
}

程序编译时出现以下错误:

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);

我知道,我必须提供typename,还必须声明template<>。但不幸的是,我没能把它做好。如果你能帮忙,我将不胜感激。非常感谢。

注意:我知道在.h文件中定义函数本身是一种不好的做法。稍后我将制作另一个.cpp文件。

我真的觉得发布自己问题的答案很愚蠢。我犯的错误真是愚蠢。

如果你注意到功能-

const char* InOut_Schedular_Settings

与我的列表名称相同:

231    list<InOut_Schedular_Settings>
238    list<InOut_Schedular_Settings> InOut_Schedular_Settings_list;

我所要做的就是更改函数名:

const char* InOut_Schedular_Settings

(其他)

const char* InOut_Schedular_Settings1

抱歉你这么不耐烦。