2013-03-30 137 views
3

我使用的std ::向量在我的計劃,我得到這個錯誤在編譯時:C++編譯向量誤差,使用矢量時::的push_back()方法

/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); 
    }; 

這是事情。該錯誤是由該方法用戶:: ADDUSER()引起的:

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

如果我刪除第二行

users.push_back(newUser); 

它工作正常,但很好,它不會像,你的工作請參閱因爲它阻止我將新記錄添加到「用戶」矢量數組中。如果有人告訴我是什麼原因,我會很感激。謝謝

+1

[非靜態const成員可能重複,不能使用默認賦值運算符](http://stackoverflow.com/questions/634662/non-static-const-member-cant-use-default-assignment-運營商) –

回答

5

您必須提供複製構造函數才能使用push_back,因爲您的類包含非靜態const成員。

你可以使用,而不是一個getter解決這個問題很容易:

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

thanx,它的工作原理:-) –

+0

@MichalArtazov:不客氣。但是,如果您使用複製構造函數方法,請不要忘記也要實施賦值運算符,因爲您可能會意外地使用它。 – Zeta

2

大多數時候,編譯器將提供一個拷貝賦值運算符給你,但因爲你有一個const成員變量,它不是編譯器可以這樣做。