使用用户定义的 class 和 int 创建向量 在“struct std::_Vector_base] 的实例化中......在“class MyClass”中没有名为“value_type”的类型
creating a vector with user defined class and int In instantiation of ‘struct std::_Vector_base....no type named ‘value_type’ in ‘class MyClass’
我正在创建一个简单的 class
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class MyClass {
int p;
public:
MyClass( int q ) { p = q; }
};
但是当我尝试创建这个向量时
vector<int, MyClass> vec1(1);
我的代码中断并抛出这个异常
vector<int,MyClass> vec1(1);
In instantiation of ‘struct std::_Vector_base<int, MyClass>’:
/usr/include/c++/9/bits/stl_vector.h:386:11: required from ‘class std::vector<int, MyClass>’
vector_class.cpp:19:26: required from here
/usr/include/c++/9/bits/stl_vector.h:84:21: error: no type named ‘value_type’ in ‘class MyClass’
84 | rebind<_Tp>::other _Tp_alloc_type;
我可以解决这个问题吗?我可以像这样在 vector 中使用 int 类型和用户定义类型 vector<int,MyClass>
vector
有两个模板参数。
- 第一个是要存储到向量中的元素类型。
- 第二个是分配器,一个帮助器 class 分配和释放向量使用的内存。
您正在尝试创建一个使用 MyClass
作为分配器的向量。但是,MyClass
不提供 vector
期望的调用,因此编译失败。
你想要完成什么?
如果你想要一个包含 MyClass
对象的向量,那么你应该声明一个 vector<MyClass>
。如果你想要一个包含对象对的向量,一个 int 和一个 MyClass
那么你可以使用 vector<pair<int, MyClass>
(正如其他评论者提到的那样)。
但是从你的问题中并不清楚你真正想要的是什么。
how to print p if I am using pair in vector as u shown
您可以遍历向量的元素对并打印数据成员p
,如下所示:
class MyClass {
public:
int p;
public:
MyClass( int q ):p(q)
{
}
};
int main()
{
std::vector<std::pair<int, MyClass>> vec1{{1, MyClass(44)}, {2,MyClass(45)}, {3,MyClass(46)}};
//iterate through the vector and print data member p
for(const auto&myPair: vec1)
{
//-----------------vvvvvvvvvvvvvv-------------->print the data member p
std::cout<<myPair.second.p<<std::endl;
}
}
我正在创建一个简单的 class
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class MyClass {
int p;
public:
MyClass( int q ) { p = q; }
};
但是当我尝试创建这个向量时
vector<int, MyClass> vec1(1);
我的代码中断并抛出这个异常
vector<int,MyClass> vec1(1);
In instantiation of ‘struct std::_Vector_base<int, MyClass>’:
/usr/include/c++/9/bits/stl_vector.h:386:11: required from ‘class std::vector<int, MyClass>’
vector_class.cpp:19:26: required from here
/usr/include/c++/9/bits/stl_vector.h:84:21: error: no type named ‘value_type’ in ‘class MyClass’
84 | rebind<_Tp>::other _Tp_alloc_type;
我可以解决这个问题吗?我可以像这样在 vector 中使用 int 类型和用户定义类型 vector<int,MyClass>
vector
有两个模板参数。
- 第一个是要存储到向量中的元素类型。
- 第二个是分配器,一个帮助器 class 分配和释放向量使用的内存。
您正在尝试创建一个使用 MyClass
作为分配器的向量。但是,MyClass
不提供 vector
期望的调用,因此编译失败。
你想要完成什么?
如果你想要一个包含 MyClass
对象的向量,那么你应该声明一个 vector<MyClass>
。如果你想要一个包含对象对的向量,一个 int 和一个 MyClass
那么你可以使用 vector<pair<int, MyClass>
(正如其他评论者提到的那样)。
但是从你的问题中并不清楚你真正想要的是什么。
how to print p if I am using pair in vector as u shown
您可以遍历向量的元素对并打印数据成员p
,如下所示:
class MyClass {
public:
int p;
public:
MyClass( int q ):p(q)
{
}
};
int main()
{
std::vector<std::pair<int, MyClass>> vec1{{1, MyClass(44)}, {2,MyClass(45)}, {3,MyClass(46)}};
//iterate through the vector and print data member p
for(const auto&myPair: vec1)
{
//-----------------vvvvvvvvvvvvvv-------------->print the data member p
std::cout<<myPair.second.p<<std::endl;
}
}