note: candidate constructor not viable: requires 2 arguments, but 0 were provided 缺乏无参构造报错

 创建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;
}

 将注释的无参构造使用即可消除错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值