Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
#1

Перегрузка - подчеркивает что ошибка здесь - a.strb - C++

26.02.2014, 18:43. Просмотров 639. Ответов 21
Метки нет (Все метки)

C++
1
2
3
4
Texts Texts :: operator + (const Texts &a) {
    Texts tmp;
    tmp.str = strh + a.strb;
}
подчеркивает что ошибка здесь - a.strb


не могу понять в чем дело, strh и strb это объекты производных классов
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2014, 18:43     Перегрузка - подчеркивает что ошибка здесь - a.strb
Посмотрите здесь:

C++ Ребята что здесь неправильно?
C++ Что здесь не так
C++ где здесь ошибка?
Что здесь не так? C++
C++ Что здесь не правильно?
Что здесь не правильно? (переменные) C++
C++ else подчеркивает и пишет что требуется оператор
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Тамика
Котовчанин
 Аватар для Тамика
866 / 446 / 132
Регистрация: 16.02.2010
Сообщений: 2,665
Записей в блоге: 27
26.02.2014, 18:45     Перегрузка - подчеркивает что ошибка здесь - a.strb #2
А компилировали? Что пишет компилятор?
И можно класс целиком?
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 18:46  [ТС]     Перегрузка - подчеркивает что ошибка здесь - a.strb #3
Тамика, пишет, что a должен быть целочисленным, хотя мне нужно сложить два числа, которые находятся в двух разных классах

там 4 класса, поэтмоу проблематично будет
Тамика
Котовчанин
 Аватар для Тамика
866 / 446 / 132
Регистрация: 16.02.2010
Сообщений: 2,665
Записей в блоге: 27
26.02.2014, 18:48     Перегрузка - подчеркивает что ошибка здесь - a.strb #4
C++
1
a.strb
- можно хотя бы кусок, где Вы описываете эту переменную.
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 18:50  [ТС]     Перегрузка - подчеркивает что ошибка здесь - a.strb #5
Тамика,
C++
1
2
3
4
void Texts :: Textsassign() {
      strb = new C_StringB; 
      strh = new C_StringH;
    }
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
26.02.2014, 18:57     Перегрузка - подчеркивает что ошибка здесь - a.strb #6
RayPas,
Все понял, надо разыменовать указатели, чтобы работало.

C++
1
2
3
4
Texts Texts :: operator + (const Texts &a) {
    Texts tmp;
    tmp.str = *strh + *a.strb;
}
Тамика
Котовчанин
 Аватар для Тамика
866 / 446 / 132
Регистрация: 16.02.2010
Сообщений: 2,665
Записей в блоге: 27
26.02.2014, 18:57     Перегрузка - подчеркивает что ошибка здесь - a.strb #7
Цитата Сообщение от RayPas Посмотреть сообщение
хотя мне нужно сложить два числа, которые находятся в двух разных классах
Сложно, однако. Ничего не понятно.
C++
1
strh + a.strb
почему в первом случае Вы просто берете переменную, а во втором - берете ее у объекта а?
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 18:59  [ТС]     Перегрузка - подчеркивает что ошибка здесь - a.strb #8
DrOffset, неее, все прекрасно было, до написания этого оператора...и как вызвать его в main() тоже пока не понял(

Добавлено через 56 секунд
Тамика, ну потому что это правила перегрузки, один объект вызовет ее , другой передаст в функ-ю перегузки
Тамика
Котовчанин
 Аватар для Тамика
866 / 446 / 132
Регистрация: 16.02.2010
Сообщений: 2,665
Записей в блоге: 27
26.02.2014, 18:59     Перегрузка - подчеркивает что ошибка здесь - a.strb #9
Цитата Сообщение от RayPas Посмотреть сообщение
strh + a.strb;
Оператор "+" используется для целочисленных значений, да. Потому как бы ожидаемо. Перегрузите его сначала, а потом используйте. Я думаю, что программка не может сложить два как-то С_StringB и C_StringН.
S_el
2063 / 1570 / 301
Регистрация: 15.12.2013
Сообщений: 6,204
26.02.2014, 19:02     Перегрузка - подчеркивает что ошибка здесь - a.strb #10
А разве в вашем перегруженном операторе не должно быть оператора
C++
1
return
?
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
26.02.2014, 19:06     Перегрузка - подчеркивает что ошибка здесь - a.strb #11
Цитата Сообщение от RayPas Посмотреть сообщение
неее, все прекрасно было, до написания этого оператора
Тогда давай весь код, мы же не школе шпионов, чтобы паяльником из тебя инфу тянуть

Добавлено через 2 минуты
Цитата Сообщение от RayPas Посмотреть сообщение
C++
1
2
strb = new C_StringB; 
strh = new C_StringH;
И все-таки исходя из этого там должны быть разыменования указателей.
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 20:04  [ТС]     Перегрузка - подчеркивает что ошибка здесь - a.strb #12
Тамика, не понял. перегрузить + для елочисленных сначала, а потом его использз-ть для этого типа? вот это как раз и не понятно...
и в каком классе описать первую перегрузку? в фасадном?

Добавлено через 57 минут
ребят,хочется самому дойти, просто подскажите что делать, когда нам надо перегрузить не поля класса, а объекты со своими полями другого класса?
gray_fox
What a waste!
 Аватар для gray_fox
1252 / 1135 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
26.02.2014, 20:17     Перегрузка - подчеркивает что ошибка здесь - a.strb #13
Цитата Сообщение от RayPas Посмотреть сообщение
что делать, когда нам надо перегрузить не поля класса, а объекты со своими полями другого класса?
нельзя перегрузить поля и объекты, так что совершенно не понятно, что ты пытаешься сделать...
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 20:21  [ТС]     Перегрузка - подчеркивает что ошибка здесь - a.strb #14
gray_fox, у меня есть класс 16ричной строки и класс битовой. Их баз.класс - Строка.В Фасаде (в котором я пытаюсь описать операцию перегрузки сложения двух строк разных типов) я так предлпологаю и надо перегружать , т.к. в базовом классе Строка нельзя - так как это абстрактный класс
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
26.02.2014, 20:40     Перегрузка - подчеркивает что ошибка здесь - a.strb #15
В качестве концепта (псевдокод):
Кликните здесь для просмотра всего текста
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
class BinNumber
{
public:
    //....
 
    BinNumber operator+(HexNumber const & x) const
    {
        return BinNumber(toInt() + x.toInt());
    }
    int toInt() const
    {
        return /*convert buf to int*/;
    }
 
private:
    /*some string type*/ buf;
};
 
class HexHumber
{
public:
    //....
 
    HexNumber operator+(BinNumber const & x) const
    {
        return HexNumber(toInt() + x.toInt());
    }
    int toInt() const
    {
        return /*convert buf to int*/;
    }
 
private:
    /*some string type*/ buf;
};
gray_fox
What a waste!
 Аватар для gray_fox
1252 / 1135 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
26.02.2014, 20:42     Перегрузка - подчеркивает что ошибка здесь - a.strb #16
RayPas, не понял, что за "фасад", но думаю нужна двойная дисперечизация: можно реализовать с помощью одного публичного виртального метода и двух защищённых, примерно:
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
struct hex_string;
struct bit_string;
 
struct string {
 
   virtual void concat(string const& other) = 0;
 
protected:
   virtual void concat_to(hex_string & other) const = 0;
   virtual void concat_to(bit_string & other) const = 0;
 
   // ...
};
 
struct hex_string : string {
 
   virtual void concat(string const& other) {
      other.concat_to(*this);
   }
 
protected:
   virtual void concat_to(hex_string & other) const {
      // concat this hex_string to other hex_string
   }
 
   virtual void concat_to(bit_string & other) const {
      // concat this hex_string to other bit_string
   }
 
   // ...
};
 
struct bit_string : string {
   
   virtual void concat(string const& other) {
      other.concat_to(*this);
   }
 
protected:
   virtual void concat_to(hex_string & other) const {
      // concat this bit_string to other hex_string
   }
 
   virtual void concat_to(bit_string & other) const {
      // concat this bit_string to other bit_string
   }
 
   // ...
};
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
27.02.2014, 00:24  [ТС]     Перегрузка - подчеркивает что ошибка здесь - a.strb #17
DrOffset, я вас понял...кажется

Добавлено через 3 часа 39 минут
DrOffset, не, чет не доходит, не работает...я так понял перегрузить один класс , второй класс, а затем в фасаде перегрузить операцию типов hex и bin...но не получается
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
27.02.2014, 00:26     Перегрузка - подчеркивает что ошибка здесь - a.strb #18
Цитата Сообщение от RayPas Посмотреть сообщение
не, чет не доходит, не работает
Я бы рад помочь, но без кода остается только гадать...
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
27.02.2014, 17:14  [ТС]     Перегрузка - подчеркивает что ошибка здесь - a.strb #19
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[nick]DrOffset[/nick], окай
 
#pragma once
#include "C_String.h"
 
using Program :: C_String;
 
class C_StringHex : public C_String
{   int lengthHex;
    char* ptrH;
public:
    C_StringHex(void);
    void setC_String();
    int HexInvert(char* p);
    ~C_StringHex() {}
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#pragma once
#include "C_String.h"
 
using Program :: C_String;
 
class C_StringBit : public C_String
{   int lengthBit;
    char* ptrB;
public:
    C_StringBit(void);
    void setC_String();
    int BitInvert(char* p);
    ~C_StringBit() {}
};
вот два класса, строки которых(уже преобразованные в типы int) надо сложить в фасадном классе
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2014, 17:36     Перегрузка - подчеркивает что ошибка здесь - a.strb
Еще ссылки по теме:

C++ Ошибка подчеркивает this.
Что здесь не так? C++
подчеркивает запятую после 50, что это может быть? C++
C++ Строку с методом подчеркивает и говорит о том, что не переданы аргументы. Как их передать в метод?

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

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
27.02.2014, 17:36     Перегрузка - подчеркивает что ошибка здесь - a.strb #20
Автор, ты бредишь! Напиши просто класс "строка" и не выпендривайся с наследованием! А что такое "фасадный класс" тут никто не поймёт.
Yandex
Объявления
27.02.2014, 17:36     Перегрузка - подчеркивает что ошибка здесь - a.strb
Ответ Создать тему
Опции темы

Текущее время: 10:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru