no matching function for call to ‘accumulate_block<__gnu_cxx::__normal_iterator<int*, std::vector<int> >, int>::accumulate_block(__gnu_cxx::__normal_iterator<int*, std::vector<int> >&, __gnu_cxx::__normal_iterator<int*, std::vector<int> >&)’ T last_result=accumulate_block<Iterator,T>(block_start,last); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
时间: 2023-07-06 22:43:02 浏览: 206
这个错误的原因是`accumulate_block`的构造函数需要两个`const`引用类型的参数,而在调用构造函数时传递了两个非`const`引用类型的参数。这样做是错误的,因为非`const`引用类型的参数无法绑定到`const`引用类型的参数上。
要解决这个错误,可以将`accumulate_block`的构造函数的参数类型改为`const`引用类型,例如:
```c++
accumulate_block(const Iterator& begin, const Iterator& end)
: block_start(begin), block_end(end) {}
```
这样就可以正确地创建`accumulate_block`对象了。另外,如果`block_start`和`block_end`是`Iterator`类型的成员变量,也需要将它们的类型改为`const Iterator&`。
相关问题
no matching function for call to 'std::shared_ptr<int>::shared_ptr(int)'
这个错误通常是因为您在使用 `std::shared_ptr` 时,将一个非指针类型的值传递给了构造函数。 `std::shared_ptr` 的构造函数需要接受一个指针类型的参数。
例如,下面的代码会导致这个错误:
```
int i = 10;
std::shared_ptr<int> ptr(i); // 错误:不能将整型变量作为参数传递给 std::shared_ptr 的构造函数
```
正确的做法是将指针地址传递给构造函数,即:
```
int i = 10;
std::shared_ptr<int> ptr(new int(i)); // 正确:传递了指针地址给 std::shared_ptr 的构造函数
```
这样就能够顺利地创建一个 `std::shared_ptr` 类型的智能指针了。
error: no matching function for call to 'make_pair'
"error: no matching function for call to 'make_pair'"这个错误是在C++中当你试图使用`std::make_pair()`函数创建一个pair类型的临时对象时发生的。`make_pair`是一个用于生成pair对象的辅助函数,它期望两个匹配的数据类型作为参数,然后返回一个包含这两个元素的新pair。
例如,如果你尝试这样做:
```cpp
int a = 5, b = 10;
auto pair = make_pair(a, b);
```
如果编译器找不到能够接受`a`和`b`值的`make_pair`版本,就会抛出这样的错误。
常见的情况可能是:
1. 参数类型不符:`make_pair`需要两个相等类型的参数,例如`make_pair<int, int>`,但你可能传递了不同类型,如`make_pair<int, double>`。
2. `make_pair`不存在:如果你使用的是旧版本的C++标准库,可能还没有引入`<utility>`头文件中的`make_pair`,或者你在不允许的地方使用了`std::`前缀。
3. 空模板参数:如果你忘记提供`<utility>`或`std::`前缀,`make_pair`会变成`std::make_pair<>`,在这种情况下,也需要明确指定类型。
解决这个问题的办法通常是检查参数类型是否一致,确保包含了正确的头文件,以及在必要时显式指定`std::`。
阅读全文