error: no matching function for call to 'parse_threads::connect(MyTemplateClass<SP104>*, std::function<void(int, QString)> MyTemplateClass<SP104>::*, parse_threads*, void (parse_threads::*)(int, QString))' QObject::connect(&sP104_class, &MyTemplateClass<SP104> ::onTriggered, this,&parse_threads::read);
时间: 2024-02-18 22:04:39 浏览: 151
这个错误信息显示了`no matching function for call to 'parse_threads::connect'`,意思是编译器找不到匹配的连接函数来连接你的信号和槽函数。
在这个特定的情况下,你正在尝试连接一个 `MyTemplateClass<SP104>` 类的 `onTriggered` 信号到 `parse_threads` 类的 `read` 槽函数。但是,出现了一个问题:你使用了 `std::function` 类型来声明信号,而不是使用 Qt 的信号声明方式。因此,你需要使用 Qt 的信号声明方式来解决这个问题。
你可以通过以下方式解决这个问题:
1. 使用 Qt 的信号声明方式来声明 `onTriggered` 信号。例如:
```
signals:
void onTriggered(int, QString);
```
2. 使用 Qt 的 `SIGNAL` 和 `SLOT` 宏来连接信号和槽函数。例如:
```
QObject::connect(&sP104_class, SIGNAL(onTriggered(int, QString)), this, SLOT(read(int, QString)));
```
注意,你需要将 `read` 槽函数声明为 Qt 的槽函数,并使用 `SLOT` 宏来声明槽函数的签名。
希望这些信息可以帮助你解决问题。如果问题仍然存在,请提供更多的上下文和代码细节,这样我可以更好地帮助你。
相关问题
error: no matching function for call to 'std::vector<std::vector<int> >::push_back(int*&)' 9 | result.push_back(combination);
错误提示 "error: no matching function for call to 'std::vector<std::vector<int>>::push_back(int*&)'”表示在尝试将一个指向整型数组的引用(`int*&`)压入一个二维向量(`std::vector<std::vector<int>>`)时,编译器找不到合适的插入函数。`push_back`通常用于添加元素,而不是元素的引用。
在这个上下文中,看起来`combination`是一个包含整数的数组,并不是另一个可以存储数组的容器,所以直接推送到二维向量里是不允许的。解决这个问题,你需要先创建一个临时的一维`std::vector<int>`来存储`combination`的所有元素,然后再将其压入二维向量中。正确的做法可能是这样的:
```cpp
std::vector<int> tempCombination;
for (int value : combination) {
tempCombination.push_back(value);
}
// 然后再将 tempCombination 添加到 result 中
result.push_back(tempCombination);
```
这样就可以避免原始错误了。
I:\QT\CustomControl\smallwidget.cpp:12: error: no matching function for call to 'SmallWidget::connect(QSpinBox*&, <unresolved overloaded function type>, QSlider*&, void (QAbstractSlider::*)(int))' connect(ui->spinBox,&QSpinBox::valueChanged,ui->horizontalSlider,&QSlider::setValue); ^
这个错误是因为 `connect` 函数的第二个参数没有正确的匹配。可以尝试使用 `static_cast` 将函数指针转换为正确的类型。例如:
```cpp
connect(ui->spinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), ui->horizontalSlider, &QSlider::setValue);
```
或者使用 Lambda 表达式来代替信号:
```cpp
connect(ui->spinBox, QOverload<int>::of(&QSpinBox::valueChanged), [=](int value) {
ui->horizontalSlider->setValue(value);
});
```
这样也可以实现相同的功能,并且更加清晰易懂。
阅读全文