Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;使用vector::push_back()方法时出现向量编译错误_C++_Vector_Compiler Errors - Fatal编程技术网

C++ C++;使用vector::push_back()方法时出现向量编译错误

C++ C++;使用vector::push_back()方法时出现向量编译错误,c++,vector,compiler-errors,C++,Vector,Compiler Errors,我在程序中使用std::vector,编译时出现以下错误: /usr/lib/gcc/i686 pc cygwin/3.4.4/include/c++/bits/vector.tcc:在成员函数“User&User::operator=(const User&)”中: /usr/lib/gcc/i686 pc cygwin/3.4.4/include/c++/bits/vector.tcc:238:实例化自void std::vector::_M_insert_aux(u gnu_cxx::u

我在程序中使用std::vector,编译时出现以下错误:

/usr/lib/gcc/i686 pc cygwin/3.4.4/include/c++/bits/vector.tcc:在成员函数“User&User::operator=(const User&)”中:

/usr/lib/gcc/i686 pc cygwin/3.4.4/include/c++/bits/vector.tcc:238:实例化自
void std::vector::_M_insert_aux(u gnu_cxx::u normal_iterator,const_Tp&)[带Tp=User,_Alloc=std::allocator]'
/usr/lib/gcc/i686 pc cygwin/3.4.4/include/c++/bits/stl_vector.h:564:实例化自

main.cpp:100:从此处实例化

/usr/lib/gcc/i686 pc cygwin/3.4.4/include/c++/bits/vector.tcc:238:错误:非静态常量成员'const std::string User::NAME',无法使用默认赋值运算符

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

如果我删除第二行

users.push_back(newUser);

它工作得很好,但它不像您看到的那样工作,因为它阻止我将新记录添加到“用户”向量数组中。如果有人告诉我原因,我会很感激的。谢谢

您必须提供一个副本构造函数才能使用
push_back
,因为您的类包含一个非静态
const
成员

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

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

大多数情况下,编译器会为您提供一个复制赋值运算符,但由于您有一个const成员变量,因此编译器不可能这样做。

可能重复@MichalArtazov:不客气。但是,如果您使用复制构造函数方法,也不要忘记实现赋值操作符,因为您可能会意外地使用它。
users.push_back(newUser);
class User{
public:
    string NAME() const { return m_name; }
    /* ... */
private:
    string m_name;
    /* ... */
};