Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Ошибка при перегрузке оператора (должна быть нестатической функцией-членом)

Автор вопроса: RocketqОтветов: 2

Я пишу строковый класс самостоятельно. И у меня есть такой код. Я просто хочу перегрузить operator=. Это мой фактический код, и я получаю ошибку в последней части кода.

#include <iostream>
#include <string.h>
#include <stdlib.h>

using namespace std;

class S {
    public:
        S();
        ~S() { delete []string;}
        S &operator =(const S &s);

    private:
        char *string;
        int l;
};

S::S()
{
    l = 0;
    string = new char[1];
    string[0]='\0';
}

S &operator=(const S &s)
{
    if (this != &s)
    {
        delete []string;
        string = new char[s.l+1];
        memcpy(string,s.string,s.l+1);
        return *this;
    }
    return *this;
}

Но, к сожалению, я получаю сообщение об ошибке "S& operator=(const S&)" должна быть нестатической функцией-членом.

  • Этот фрагмент кода компилируется для меня с помощью g++. Neil 12.10.2012
  • Не уверен, что вы делаете, но функция отлично компилируется с объявленным memcpy: а> chris 12.10.2012
  • Вы не пропустили точку с запятой после определения класса, не так ли? Sergey Kalinichenko 12.10.2012
  • @dasblinkenlight, это то, о чем я догадался, но я никогда не сталкивался с этой ошибкой при этом. Есть ли специальный компилятор, который делает? chris 12.10.2012
  • @chris А, пропущенная точка с запятой после объявления ... Это может привести к таким забавным ошибкам :) Sergey Kalinichenko 12.10.2012
  • Ваш оператор присваивания является закрытым, и вам не хватает ; в конце объявления класса. Опубликуйте минимальный код, который воспроизводит проблему. juanchopanza 12.10.2012

c++operator-overloading

Ответы

Ответ 1 · рейтинг 39 · PiotrNycz

Вам не хватает имени класса:

Это глобальный оператор, = не может быть глобальным:

S &operator=(const S &s)

Вы должны определить это как функцию класса:

S & S::operator=(const S &s)
//  ^^^

Ответ 2 · рейтинг 7 · Spectral

Я считаю, что PiotrNycz дал разумный ответ. Здесь, пожалуйста, извините меня, чтобы добавить еще одно слово.

В С++ функция перегрузки оператора присваивания не может быть friend function. Использование дружественной функции для оператора = вызовет ту же ошибку компилятора "перегрузка = оператор должен быть нестатической функцией-членом".

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы