Operator overloading required

I have a class that I derived from CObject...and the strangest thing is happening. There are no dynamic members...yet the compiler insists that I must overload an operator for any operation I want to do with it. Usually....the compiler defaults to a member-by-member copy constructor...however..this one does not. What is different about this class??

class CUserProfile : public CObject

      CUserProfile(CUserProfile* cp);
      virtual ~CUserProfile();
      virtual void Serialize(CArchive& ar);

      //User Profile
      CString m_sFullName;
      CString m_sEMailAddress;
      CString m_sNick;
      CString m_sAltNick;
      CString m_sPassword;
      bool m_bInvisible;
      bool m_bUsePassword;

      //Connection Options
      int m_nRetrys;

      //Display Options
      bool m_bPartJoin;
      bool m_bQuit;
      bool m_bColors;
      bool m_bShowUnknowns;

      //DCC Options
      int m_nPacketSize;
      bool m_bFillFileSpaces;
      bool m_bFastSend;
      bool m_bResume;
      bool m_bWarnAccept;
      CString m_sGetFolder;
      CString m_sSharedFolder;
      bool SetNick(CString n);
      bool SetAlternateNick(CString an);
      void SetRealName(CString rn);
      void SetEmail(CString em);
      void SetPassword(CString p);
      void SetInvisible(bool i);
      void SetRetryCount(int rc);
      void SetShowJoinPart(bool jp);
      void SetShowUnknownMsgs(bool um);
      void SetShowColors(bool sc);
      void SetShowQuits(bool sq);
      void SetPacketSize(int ps);
      void SetFillSpaces(bool fs);
      void SetFastSend(bool fs);
      void SetResumeOnExist(bool roe);
      void SetWarnOnAccept(bool woa);
      void SetGetFolder(CString gf);
      CString GetNick(void);
      CString GetAltNick(void);
      CString GetRealName(void);
      CString GetEmail(void);
      bool GetInvisibleMode(void);
      CString GetPassword(void);
      int GetRetryCount(void);
      bool GetShowJoinPart(void);
      bool GetShowUnknown(void);
      bool GetShowColors(void);
      bool GetShowQuits(void);
      int GetPacketSize(void);
      bool GetFillFileSpaces(void);
      bool GetFastSend(void);
      bool GetResumeOnExist(void);
      bool GetWarnOnAcceptSend(void);
      CString GetSendFolder(void);
      //CUserProfile operator=();
      bool GetUsePassword(void);
      void SetUsePassword(bool up);

Who is Participating?
jkrConnect With a Mentor Commented:
Your variables are all but POD, so you will need both a copy constructor and assignment operator:

CUserProfile::CUserProfile(const CUserProfile& r) {

    m_sFullName=r.m_sFullName ;

    // for all your members....

CUserProfile& CUserProfile::operator=(const CUserProfile& r) {

    m_sFullName=r.m_sFullName ;

    // for all your members....

    return *this;

And, you'll have to declare them like

    CUserProfile(const CUserProfile& r);
    CUserProfile& operator=(const CUserProfile& r);

in your class.

SGyvesAuthor Commented:
For example I can't say obj1 = obj2;
This is from AFX.h

      // Disable the copy constructor and assignment by default so you will get
      //   compiler errors instead of unexpected behaviour if you pass objects
      //   by value or assign objects.
      CObject(const CObject& objectSrc);              // no implementation
      void operator=(const CObject& objectSrc);       // no implementation

So this behaviour is by design.. :)

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

>>So this behaviour is by design.. :)

You are right, but it does not say one can't override it :o)
SGyvesAuthor Commented:
Ok...just wondering why this object suddenly started making me overload assignment and copy. Thank you for the explanation.  :)
>>just wondering why this object suddenly started making me overload assignment and cop

It became too complex for the compiler to handle - and, I actually would recommend implementing these *always*, as a matter of "taste" :o)
SGyvesAuthor Commented:
Yes...yes...I know...it is proper practice to always overload the copy and assignment. Ahhh...so hard not to be lazy. I agree though.
I did not say you cannot override it either! SGyves was wondering why CObject would force him to write an overloaded = operator and tried to answer to the point.
SGyvesAuthor Commented:
I understood Priyesh....no worries.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.