错误:对‘std::thread::thread(<unresolved overloaded function type>)’的调用没有匹配的函数 std::thread reader_thread(readStream);
时间: 2023-09-20 13:11:34 浏览: 384
引用中的代码展示了一个在使用std::thread时出现的错误。错误信息是"no matching function for call to 'std::thread::thread(<unresolved overloaded function type>, A*, int)’"。这个错误是因为在将重载的函数放入std::thread的参数时,编译器无法匹配到正确的函数。
引用中的代码展示了另一种情况下的解决方案,使用了更优的方法。在这个例子中,定义了一个typedef来表示一个成员函数指针类型,然后通过将函数指针赋值给std::thread的参数来解决问题。
引用中的代码展示了另一种解决方案,通过强制类型转换来消除函数指针的歧义。在这种情况下,std::thread的参数中不再有隐式的this指针。
根据提供的信息,错误信息是"no matching function for call to 'std::thread::thread(<unresolved overloaded function type>)’"。从代码中可以看出,std::thread的构造函数调用了一个名为readStream的函数,但是由于函数的重载问题,编译器无法匹配到正确的函数。为了解决这个问题,可以参考引用和中的方法,使用typedef或强制类型转换来明确指定函数指针的类型。这样就可以避免函数重载引起的歧义,从而解决错误。
相关问题
[Error] no matching function for call to 'std::basic_ifstream<char>::basic_ifstream(<unresolved overloaded function type>)'
### 回答1:
这个错误消息表示在调用 std::basic_ifstream 时找不到匹配的函数。具体原因是你在构造 basic_ifstream 对象时传递了一个无法解析的过载函数类型。
建议检查你的代码,确保传递给 basic_ifstream 的参数是合法的。例如,您可以将文件名作为参数传递给 basic_ifstream 构造函数,以在读取文件时打开它:
```
std::ifstream file("file.txt");
```
### 回答2:
这个错误是因为使用了无法解析的重载函数类型作为参数导致的。
std::basic_ifstream是C++标准库中的输入文件流类,用于从文件中读取数据。它有多个构造函数,每个构造函数在参数类型和数量上都有所不同,以满足不同的使用场景。
但是,在这个错误信息中,使用了一个无法解析的重载函数类型作为std::basic_ifstream构造函数的参数。原因可能有以下几种情况:
1. 函数名错误:可能是函数名的拼写错误,或者函数根本不存在。
2. 参数类型错误:提供的参数类型与已有的函数定义不匹配。
3. 参数数量错误:提供的参数数量与已有的函数定义不匹配。
要解决这个错误,需要查看错误信息所在的代码行,并检查出现错误的函数调用,确认函数名、参数类型和参数数量是否正确。
如果函数名错误,可以修改调用的函数名拼写错误。
如果参数类型错误,可以使用正确的参数类型进行调用。
如果参数数量错误,可以修改调用的参数数量以适应已有的函数定义。
总之,根据具体的错误信息定位问题,并修复错误的函数调用,即可解决这个编译错误。
### 回答3:
这个错误是由于在调用`std::basic_ifstream<char>::basic_ifstream`构造函数时,没有匹配的函数签名导致的。函数签名是指函数的参数类型和返回类型的组合。根据错误信息中提到的`<unresolved overloaded function type>`,可以推测在构造函数调用中使用了重载函数,但编译器无法确定要调用哪个重载函数。
这个错误通常发生在以下几种情况下:
1. 在构造函数调用中传入错误的参数类型。例如,可能传入了一个函数指针或一个不同类型的对象,而不是所需的参数类型。
2. 在构造函数调用中传入的参数与可用的重载函数不匹配。可能传入的参数太多或太少,或者传入的参数类型与重载函数的参数类型不兼容。
3. 在构造函数调用时缺少必需的参数。如果构造函数有一些必需的参数,则必须提供这些参数,否则编译器将无法确定要调用哪个重载函数。
要解决这个错误,可以检查构造函数调用中所使用的参数类型是否正确,并确保传入的参数与所需的参数类型和数量匹配。如果有多个重载函数可供选择,则可以使用类型转换或重载解析规则来解决函数调用不明确的问题。
D:\QT\InverterCAN\CAN\mainwindow.cpp:57: error: no matching function for call to 'MainWindow::connect(MainWindow*, <unresolved overloaded function type>, MainWindow*, <unresolved overloaded function type>)' connect(this,ui->spinBox_Debug1->editingFinished,this,spinBox_Debug1Slot); ^
这个错误提示是因为 `connect` 函数的第二个参数没有正确传递。`connect` 函数的第二个参数应该是一个函数指针,用来指定信号发出后,要执行的槽函数。在你的代码中,第二个参数是 `ui->spinBox_Debug1->editingFinished`,这个并不是函数指针。
可能是因为你想传递 `spinBox_Debug1Slot` 作为槽函数,但是语法写错了。正确的写法应该是:
```cpp
connect(ui->spinBox_Debug1, SIGNAL(editingFinished()), this, SLOT(spinBox_Debug1Slot()));
```
这里使用了 `SIGNAL` 宏和 `SLOT` 宏,将函数名转换成了一个字符串,这样就可以正确传递函数指针了。注意,槽函数的声明也需要加上 `slots` 关键字,例如:
```cpp
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void spinBox_Debug1Slot();
private:
Ui::MainWindow *ui;
};
```
阅读全文