没有与参数列表和对象匹配的 重载函数 "std::vector<_Tp, _Alloc>::push_back [其中 _Tp=jobNode, _Alloc=std::allocator<jobNode>]" 实例(对象包含阻止匹配的类型限定符)
时间: 2024-09-10 08:08:10 浏览: 108
当你尝试执行`taskVec.push_back(jobNode(job_id[i+1], job_time[i+1]));`时,出现这种错误通常是因为编译器找不到与给定参数类型`jobNode(job_id[i+1], job_time[i+1])`相匹配的`push_back`函数。`std::vector`的`push_back`方法通常接受一个通用类型的元素,例如:
```cpp
template <typename T>
void push_back(const T& value);
```
这意味着你需要提供一个可以直接添加到向量中的`jobNode`对象实例,而不是一个构造函数调用表达式。
如果你的`jobNode`类有一个特殊的构造函数,比如带有一些特定模板参数或者类型限定符,那么它可能不会被`push_back`方法隐式转换。在这种情况下,你需要明确地提供类型:
```cpp
// 假设jobNode有特殊的构造函数
taskVec.push_back(jobNode<SomeQualifier>(job_id[i+1], job_time[i+1]));
```
或者是显式地调用该构造函数并将结果传递给`push_back`:
```cpp
taskVec.push_back(jobNode(job_id[i+1], job_time[i+1]).copy());
```
这里假设`jobNode`有一个返回它的复制的公共成员函数`copy()`。
相关问题
没有与参数列表匹配的构造函数 "std::vector<_Tp, _Alloc>::vector [其中 _Tp=MyString, _Alloc=std::allocator<MyString>]" 实例C/C++(289)
在C++中,`std::vector`是一个动态数组容器,用于存储同一种类型的元素。当你尝试创建一个`std::vector`实例时,如果没有提供对应的构造函数来指定元素类型(`_Tp`)和分配器(`_Alloc`),编译器会报错,因为需要明确指定要存储的数据类型以及内存管理策略。
例如,如果你有一个名为`MyString`的自定义字符串类,并试图创建一个`std::vector<MyString>`,但忘记提供初始值或大小,可能会看到类似下面的错误:
```cpp
std::vector<MyString> vec; // 错误:没有显式指定大小或初始化
// 或者
std::vector<std::string> vec; // 如果你本想用MyString,但误写成了std::string
```
在这种情况下,你需要提供一个正确的构造函数形式,比如:
```cpp
std::vector<MyString> vec; // 默认空容器,若需指定大小
std::vector<MyString, std::allocator<MyString>> vec(size); // 显式指定大小
```
严没有与参数列表和对象匹配的 重载函数 "std::vector<_Ty, _Alloc>::erase [其中 _Ty=int, _Alloc=std::allocator<int>]" 实例(对象包含阻止匹配的类型限定符)是什么错误
这个错误是由于在调用erase函数时,传入的参数与函数的参数列表不匹配所导致的。可能的原因是传入的参数类型不正确或者传入的参数数量与函数要求的不一致。另外,错误信息中提到“对象包含阻止匹配的类型限定符”,这可能是因为在调用erase函数时,使用了对象的限定符,如const或volatile,导致无法匹配函数的参数列表。
阅读全文