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

标签 c++ vector compiler-errors

我在我的程序中使用了 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 fromvoid 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);

它工作正常,但是它并不像您看到的那样工作,因为它阻止我将新记录添加到“用户” vector 数组中。如果有人告诉我原因是什么,我将不胜感激。谢谢

最佳答案

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

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

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

关于使用 vector::push_back() 方法时,C++ vector 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15723900/

相关文章:

c++ - 在 GCC 中编译 C++ 文件时出错

c++ - 尽管包含头文件和库,uuid 函数仍未定义

c++ - vsnprintf 返回超过给定缓冲区大小的大小

c++ - std::vector 异常是中立的吗?

java - 在一个软件包: compiler fails to read other class下

c++ - c++中的编译错误是什么?

c++ - 提升精神宽字符规则创建空字符

vector 声明的 C++ vector

C++ vector 与数组(时间)

scala - for 循环和范围 : found :Int required: scala. collection.generic.CanBuildFrom[Nothing,String,?] 的奇怪行为