加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C vector编译错误,当使用vector :: push_back()方法时

发布时间:2020-12-16 09:43:39 所属栏目:百科 来源:网络整理
导读:我在我的程序中使用std :: vector,编译时出现此错误: /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/vector.tcc: In member function `User User::operator=(const User)’: /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/vector.tcc:238: in
我在我的程序中使用std :: vector,编译时出现此错误:

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/vector.tcc: In member function `User& User::operator=(const User&)’:

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/vector.tcc:238: instantiated from void std::vector<_Tp,_Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename _Alloc::pointer,std::vector<_Tp,_Alloc> >,const _Tp&) [with _Tp = User,_Alloc = std::allocator<User>]'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_vector.h:564: instantiated from
void std::vector<_Tp,_Alloc>::push_back(const _Tp&) [with _Tp = User,_Alloc = std::allocator]’

main.cpp:100: instantiated from here

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/vector.tcc:238: error: non-static const member `const std::string User::NAME’,can’t use default assignment operator

我有“用户”和“用户”类:

class User {
    public:
        const string NAME;

        User(const string &name,const bool &isMain = false) : NAME(name),isMain(isMain) {};
        void addFollower(User * user);
        void addReplier(User * user,const int &count);
        void addMentioner(User * user,const int &count);
        void addRetweeter(User * user,const int &count);

    private:
        vector<User *> followedBy,repliedBy,mentionedBy,retweetedBy;
        vector<int> replyCount,mentionCount,retweetCount;
        bool isMain;
    };


class Users {
    public:
        vector<User> users;

        void addUser(const string &name,bool isMain = false);
        User * findUser(const string &name);
        friend ostream & operator <<(ostream &outStream,const Users &users);
        User & operator [] (unsigned int index);
    };

这就是事情.该错误是由Users :: addUser()方法引起的:

void Users::addUser(const string &name,bool isMain) {
    User newUser(name,isMain);
    users.push_back(newUser);
}

如果我删除第二行

users.push_back(newUser);

它工作正常,但是,它不像你看到的那样工作,因为它阻止我将新记录添加到“users”向量数组中.如果有人告诉我原因是什么,我会感恩的.谢谢

解决方法

您必须提供复制构造函数才能使用push_back,因为您的类包含非静态const成员.

您可以使用getter轻松解决此问题:

class User{
public:
    string NAME() const { return m_name; }
    /* ... */
private:
    string m_name;
    /* ... */
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读