Ryan
Ryan

Reputation: 45

Overloading assignment operator with Classes and Vectors

I have a class defined:

#ifndef _STRINGCLASS_H
#define _STRINGCLASS_H
using namespace std;

#include <iostream>
#include <vector>

class String {
protected:
    int length;
    vector<string> buf;

public:
    String();
    String(const char* input);
    String(char input);
    String(int input);
    String(const String& input);
    String(char input, int input2);

    String& operator=(const String& input);


};

#endif

and am trying to overload the assignment operator by such:

String& operator=(const String& input) {

    buf = input.buf;
    length = input.length;

    return *this;
}

and I get the error code that buf is protected and length is protected. I'm not sure what I am missing. How can I properly overload the assignment operator with vectors and ints?

Upvotes: 0

Views: 2103

Answers (2)

juanchopanza
juanchopanza

Reputation: 227370

You do not need to provide any special member functions for your class, because the compiler synthesized ones will do the right thing in this case. The best option is to remove the assignment operator and copy constructor from your class definition.

class String 
{
protected:
    int length;
    vector<string> buf;

public:
    String();
    String(const char* input);
    String(char input);
    String(int input);
    String(char input, int input2);
};

Upvotes: 2

cdhowie
cdhowie

Reputation: 168988

You need to define the implementation as part of the class. You are missing the class specifier:

//      vvvvvvvv
String& String::operator=(const String& input) {

    buf = input.buf;
    length = input.length;

    return *this;
}

As written, you are defining a free operator overload (not bound to a class), and it's actually invalid to declare a free assignment operator overload anyway.

From the perspective of a free operator overload that isn't a member of String, buf and length are indeed inaccessible because they are private.

Upvotes: 1

Related Questions