创建vector容器时里面的参数类型为person,此时调用了匿名无参构造函数,没有无参构造会报错
/usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_construct.h:75:38: error: no matching constructor for initialization of 'person'
{ ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_uninitialized.h:527:8: note: in instantiation of function template specialization 'std::_Construct<person>' requested here
std::_Construct(std::__addressof(*__cur));
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_uninitialized.h:583:2: note: in instantiation of function template specialization 'std::__uninitialized_default_n_1<false>::__uninit_default_n<person *, unsigned long>' requested here
__uninit_default_n(__first, __n);
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_uninitialized.h:645:19: note: in instantiation of function template specialization 'std::__uninitialized_default_n<person *, unsigned long>' requested here
{ return std::__uninitialized_default_n(__first, __n); }
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_vector.h:1352:9: note: in instantiation of function template specialization 'std::__uninitialized_default_n_a<person *, unsigned long, person>' requested here
std::__uninitialized_default_n_a(this->_M_impl._M_start, __n,
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_vector.h:285:9: note: in instantiation of member function 'std::vector<person, std::allocator<person> >::_M_default_initialize' requested here
{ _M_default_initialize(__n); }
^
/home/suifeng/000_project/C++/test/pingweidafen_p210.cpp:59:20: note: in instantiation of member function 'std::vector<person, std::allocator<person> >::vector' requested here
vector<person> vec_per(5);
^
/home/suifeng/000_project/C++/test/pingweidafen_p210.cpp:16:7: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided
class person
^
/home/suifeng/000_project/C++/test/pingweidafen_p210.cpp:16:7: note: candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided
/home/suifeng/000_project/C++/test/pingweidafen_p210.cpp:27:9: note: candidate constructor not viable: requires 2 arguments, but 0 were provided
person(string str,int s)
^
1 error generated.生成已完成,但出现错误。
#include<iostream>
#include<vector>
#include<deque>
#include<string>
#include<algorithm>
using namespace std;
class person
{
public:
string name;
int score;
/* //创建vector容器时里面的参数类型为person,此时调用了匿名无参构造函数,没有无参构造会报错
person()
{
this->name=" ";
this->score=0;
} */
person(string str,int s)
{
this->name=str;
this->score=s;
}
};
void print_vector_person(const vector<person>& vec)
{
for (vector<person>::const_iterator const_it =vec.begin();const_it!=vec.end();const_it++)
{
cout<<"name:"<<const_it->name<<" ";
cout<<"score"<<const_it->score<<" ";
cout<<endl;
}
}
void print_deque_int(const deque<int> & deq)
{
for (deque<int>::const_iterator const_it=deq.begin();const_it!=deq.end();const_it++)
{
cout<<*const_it<<" ";
}
cout<<endl;
}
void vector_person()
{
srand(time(NULL));
vector<person> vec_per(5);
string name="player";
string list_number="123456";
int zero=0;
for (int i=0;i<5;i++)
{
string name="player";
name+=list_number[i];
person p(name,zero);
vec_per.push_back(p);
}
for (vector<person>::iterator it=vec_per.begin();it!=vec_per.end();it++)
{
deque<int> deq(10);
int sum=0;int ave=0;
for (int i=0;i<10;i++)
{
deq[i]=rand()%100;
}
sort(deq.begin(),deq.end());
print_deque_int(deq);
deq.pop_back();deq.pop_front();
for (deque<int>::iterator it_1=deq.begin();it_1!=deq.end();it_1++)
{
sum+=*it_1;
}
ave=sum/deq.size();
int main()
{
vector_person();
cout<<"running finished"<<endl;
return 0;
}
int main()
{
vector_person();
cout<<"running finished"<<endl;
return 0;
}
将注释的无参构造使用即可消除错误。