Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 25.09.2018
Сообщений: 2
1

Объявление перегрузки операторов

28.09.2018, 12:28. Показов 1196. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Трабл заключается в том, что не получается объявить операторы за пределами своего класса. Это я туплю или operator действительно не объявляются за пределами класса?

Вот во что хочет заставить меня поверить жалкий компилятор:
error: ‘String::String’ names the constructor, not the type
String::String &operator=(const String source)
Заранее спасибо


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
class String{
    char *lpstr;
    public:
    String();
    String(const String&);
    String(char *);
    ~String(){
        delete lpstr;
    }
    String &operator=(const String&){
        
    }
    String operator+(const String second) const{
        
    }
    String operator[](const int index) const{
        
    }
    char *operator+=(const String second) const{
        char *new_string;
        int memory = strlen(lpstr) + strlen(second.lpstr);
        new_string = new char(memory);
        if (new_string == NULL)
            cout<<"Memory allocation error in the += operator!"<<endl;
            strcpy(new_string, this->lpstr);
            strcat(new_string, second.lpstr);
            return new_string;
    }
};
String::String &operator=(const String source) {
    
}
String::String(const String &orig){
    if (strlen(this->lpstr) < strlen(orig.lpstr)) cout<<"Differnt strings length!"<<endl;
    else
    strcpy(this->lpstr, orig.lpstr);
}
String::String(){
    lpstr = new char[1];
    lpstr[1] = '\0';
}
String::String(char *data){
    if ((lpstr = new char[strlen(data)]) == NULL)
        cout<<"Memory allocation error in constructor!"<<endl;
    if (!strcpy(lpstr, data))
        cout<<"Cannot put the data in the example!"<<endl;
}
int main() {
    String g;
    return 0;
}
Вот во что хочет заставить меня поверить жалкий компилятор:
error: ‘String::String’ names the constructor, not the type
String::String &operator=(const String source)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2018, 12:28
Ответы с готовыми решениями:

Перегрузки операторов. В чем ошибка?
Доброго времени суток) В ВУЗе задали задание: написать класс Многочлен, и описать в нем методы...

Особенности перегрузки некоторых операторов
У меня есть два вопроса насчёт перегрузки операторов. 1. Есть префиксные операторы ++ и -- и...

Изучение возможности перегрузки операторов в С++
Изучение возможности перегрузки операторов в С++.

После перегрузки операторов не работает cout
Здравствуйте. После использования перегруженного оператора + перестает работать оператор вывода....

5
166 / 109 / 57
Регистрация: 30.08.2018
Сообщений: 357
28.09.2018, 13:13 2
Цитата Сообщение от Kirill1984 Посмотреть сообщение
(const String source)
нужна константная ссылка. У Вас как-то вразнобой идёт.
Где-то ссылка, где-то по значению передаёте.
1
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
28.09.2018, 15:23 3
Цитата Сообщение от Kirill1984 Посмотреть сообщение
Это я туплю или
нет, это ты тупишь.

заменить:
C++
1
String::String &operator=(const String source) {
на:
C++
1
String& String::operator=(const String& source) {
1
18894 / 9851 / 2410
Регистрация: 30.01.2014
Сообщений: 17,295
28.09.2018, 15:24 4
Лучший ответ Сообщение было отмечено Kirill1984 как решение

Решение

Цитата Сообщение от Kirill1984 Посмотреть сообщение
Это я туплю или operator действительно не объявляются за пределами класса?
Конечно же это ты)
C++
1
2
3
4
String &String::operator=(const String & source) {
    //....
    return *this;
}
И даже после 10 и более лет работы, если тебя будут посещать такие мысли, будь уверен, в 99% случаев - это все еще ты тупишь, а не компилятор
1
Модератор
2121 / 991 / 169
Регистрация: 23.07.2018
Сообщений: 3,328
Записей в блоге: 3
28.09.2018, 15:33 5
А не определён ли уже похожий оператор в 14-16 строчках?
0
0 / 0 / 0
Регистрация: 25.09.2018
Сообщений: 2
02.10.2018, 12:57  [ТС] 6
Большое спасибо! Теперь работает)
0
02.10.2018, 12:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.10.2018, 12:57
Помогаю со студенческими работами здесь

Разработка алгоритмов и программ по реализации перегрузки операторов
Разработка алгоритмов и программ по реализации перегрузки операторов!!!!!!!!!!!!!! условие: ...

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

Все перегрузки операторов +-/*=<< >>[] для динамического класса
Нужно реализовать Все перегрузки операторов +-/*=&lt;&lt; &gt;&gt; для динамического класса + конкатенация...

Использование функций-членов для перегрузки унарных операторов
Добрый день уважаемые коллеги. Возник вопрос. как работают эти строки? three_d...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru