错误元组:‘std::C2661::tuple’:没有重载函数接受3个参数
我创建了一个名为DataManager的抽象类,它有一个纯虚函数close(ClientData b) =0;
ifndef _DataManager_HPP_
#define _DataManager_HPP_
#include <string>
#include "../ClientBlockData.hpp"
namespace slssm {
enum COMMAND_TYPE { DB_WRITE = 0, DB_READ, DB_NONE };
class DataManager {
public:
virtual std::vector<std::string> Update(ClientBlockData& blkData,
std::string& iQuery) = 0;
virtual void closeDb(ClientBlockData& blkData) = 0;
virtual std::string buildDbQuery(std::string& iTableName,
std::string& msg,
std::string& oTopic,
COMMAND_TYPE& oCmdType) = 0;
// ~DataManager() {}
};它作为SQLiteManager.hpp中的一个派生类SQLiteManager
void closeDb(ClientBlockData& blkData) {
mDb=nullptr;
}在main函数中,我像这样使用它
SQLiteManager* dbmang = new SQLiteManager(blkData.mDb, mTableName, iSSMLoggingFlag, qcc);
// Spawn a new listener thread that responds to queries
mQueryHandlerThreads[blkData.mLocalId] =
std::thread(&SQLiteManager::closeDb, dbmang,
blkData); 报告的错误
c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.15.26726\include\memory(2539,1): error C2661: 'std::tuple<void (__cdecl slssm::SQLiteManager::* )(slssm::ClientBlockData &),slssm::SQLiteManager *,slssm::ClientBlockData>::tuple': no overloaded function takes 3 arguments
1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.15.26726\include\thread(49): message : see reference to function template instantiation 'std::unique_ptr<std::tuple<void (__cdecl slssm::SQLiteManager::* )(slssm::ClientBlockData &),slssm::SQLiteManager *,slssm::ClientBlockData>,std::default_delete<_Ty>> std::make_unique<std::tuple<void (__cdecl slssm::SQLiteManager::* )(slssm::ClientBlockData &),slssm::SQLiteManager *,slssm::ClientBlockData>,void(__cdecl slssm::SQLiteManager::* )(slssm::ClientBlockData &),slssm::SQLiteManager*&,slssm::ClientBlockData&,0>(void (__cdecl slssm::SQLiteManager::* &&)(slssm::ClientBlockData &),slssm::SQLiteManager *&,slssm::ClientBlockData &)' being compiled
1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.15.26726\include\thread(49): message : with
1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.15.26726\include\thread(49): message : [
1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.15.26726\include\thread(49): message : _Ty=std::tuple<void (__cdecl slssm::SQLiteManager::* )(slssm::ClientBlockData &),slssm::SQLiteManager *,slssm::ClientBlockData>
1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.15.26726\include\thread(49): message : ]发布于 2020-11-19 15:19:45
您必须使用对blkData的引用
mQueryHandlerThreads[blkData.mLocalId] =
std::thread(&SQLiteManager::closeDb, dbmang,
std::ref(blkData)); https://stackoverflow.com/questions/61280580
复制相似问题