gpt4 book ai didi

C++11 std::thread 给出错误:没有匹配的函数来调用 std::thread::thread

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:29 27 4
gpt4 key购买 nike

我正在用这段代码测试 C++11 线程,但是在创建线程时,我遇到了错误没有匹配函数调用 'std::thread::thread()' .

这就像我给 std::thread ctr 的函数有什么问题,但我不明白它是怎么错的。它未完成,但在我看来是正确的:

标题:

#ifndef CONNECTION_H
#define CONNECTION_H

#include <thread>
#include <mysql++.h>

class Connection
{
public:
Connection(std::string mysqlUser, std::string mysqlPassword);
~Connection();

private:
std::string mysqlUser;
std::string mysqlPassword;
std::string mysqlIP;
int mysqlPort;

mysqlpp::Connection mysqlConnection;
std::thread connectionThread;

void threadLoop();
};

#endif // CONNECTION_H

来源:

#include "connection.h"

Connection::Connection(std::string mysqlUser, std::string mysqlPassword)
{
this->mysqlUser = mysqlUser;
this->mysqlPassword = mysqlPassword;
this->mysqlIP = "localhost"; //default
this->mysqlPort = 3306; //default

//Launch thread
std::thread connectionThread(threadLoop);

}

Connection::~Connection(){
mysqlConnection.disconnect();
}

void Connection::threadLoop(){
//Connect to mySQL database
mysqlConnection = new mysqlpp::Connection(false);

if(mysqlConnection.connect(NULL, mysqlIP.c_str(), mysqlUser.c_str(), mysqlPassword.c_str(), mysqlPort)){
std::string consulta = "SELECT * FROM 'Coordinates'";
mysqlpp::Query query = mysqlConnection.query(consulta);
mysqlpp::StoreQueryResult res = query.store();
query.reset();

}

while(true){
// Stuff
}
}

最佳答案

问题是threadLoop是一个成员函数,但是没有对象可以应用。只是猜测:

std::thread connectionThread(&Connection::threadLoop, this);

但这只是句法问题;还有一个逻辑问题:该行创建了一个 std::thread 类型的本地对象,该对象在函数返回时消失。它的析构函数将调用 std::terminate() 因为线程还没有加入。最有可能的是,这应该将线程附加到 connectionThread 成员。为此:

std::thread thr(threadLoop, this);
std::swap(thr, connectionThread);

关于C++11 std::thread 给出错误:没有匹配的函数来调用 std::thread::thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12624271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com