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

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

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

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

26.02.2014, 18:43. Просмотров 672. Ответов 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++ Ошибка подчеркивает this.
C++ else подчеркивает и пишет что требуется оператор
подчеркивает запятую после 50, что это может быть? C++
Слишком много аргументов в вызове функции, подчеркивает то что красным C++
C++ Строку с методом подчеркивает и говорит о том, что не переданы аргументы. Как их передать в метод?
Что здесь не так? C++
C++ Что здесь не так
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,954
Записей в блоге: 27
26.02.2014, 18:45     Перегрузка - подчеркивает что ошибка здесь - a.strb #2
А компилировали? Что пишет компилятор?
И можно класс целиком?
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 18:46  [ТС]     Перегрузка - подчеркивает что ошибка здесь - a.strb #3
Тамика, пишет, что a должен быть целочисленным, хотя мне нужно сложить два числа, которые находятся в двух разных классах

там 4 класса, поэтмоу проблематично будет
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,954
Записей в блоге: 27
26.02.2014, 18:48     Перегрузка - подчеркивает что ошибка здесь - a.strb #4
C++
1
a.strb
- можно хотя бы кусок, где Вы описываете эту переменную.
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
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
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;
}
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,954
Записей в блоге: 27
26.02.2014, 18:57     Перегрузка - подчеркивает что ошибка здесь - a.strb #7
Цитата Сообщение от RayPas Посмотреть сообщение
хотя мне нужно сложить два числа, которые находятся в двух разных классах
Сложно, однако. Ничего не понятно.
C++
1
strh + a.strb
почему в первом случае Вы просто берете переменную, а во втором - берете ее у объекта а?
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 18:59  [ТС]     Перегрузка - подчеркивает что ошибка здесь - a.strb #8
DrOffset, неее, все прекрасно было, до написания этого оператора...и как вызвать его в main() тоже пока не понял(

Добавлено через 56 секунд
Тамика, ну потому что это правила перегрузки, один объект вызовет ее , другой передаст в функ-ю перегузки
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,954
Записей в блоге: 27
26.02.2014, 18:59     Перегрузка - подчеркивает что ошибка здесь - a.strb #9
Цитата Сообщение от RayPas Посмотреть сообщение
strh + a.strb;
Оператор "+" используется для целочисленных значений, да. Потому как бы ожидаемо. Перегрузите его сначала, а потом используйте. Я думаю, что программка не может сложить два как-то С_StringB и C_StringН.
S_el
2092 / 1599 / 306
Регистрация: 15.12.2013
Сообщений: 6,427
26.02.2014, 19:02     Перегрузка - подчеркивает что ошибка здесь - a.strb #10
А разве в вашем перегруженном операторе не должно быть оператора
C++
1
return
?
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
26.02.2014, 19:06     Перегрузка - подчеркивает что ошибка здесь - a.strb #11
Цитата Сообщение от RayPas Посмотреть сообщение
неее, все прекрасно было, до написания этого оператора
Тогда давай весь код, мы же не школе шпионов, чтобы паяльником из тебя инфу тянуть

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

Добавлено через 57 минут
ребят,хочется самому дойти, просто подскажите что делать, когда нам надо перегрузить не поля класса, а объекты со своими полями другого класса?
gray_fox
What a waste!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,449
Завершенные тесты: 3
26.02.2014, 20:17     Перегрузка - подчеркивает что ошибка здесь - a.strb #13
Цитата Сообщение от RayPas Посмотреть сообщение
что делать, когда нам надо перегрузить не поля класса, а объекты со своими полями другого класса?
нельзя перегрузить поля и объекты, так что совершенно не понятно, что ты пытаешься сделать...
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 20:21  [ТС]     Перегрузка - подчеркивает что ошибка здесь - a.strb #14
gray_fox, у меня есть класс 16ричной строки и класс битовой. Их баз.класс - Строка.В Фасаде (в котором я пытаюсь описать операцию перегрузки сложения двух строк разных типов) я так предлпологаю и надо перегружать , т.к. в базовом классе Строка нельзя - так как это абстрактный класс
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
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!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,449
Завершенные тесты: 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
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
27.02.2014, 00:24  [ТС]     Перегрузка - подчеркивает что ошибка здесь - a.strb #17
DrOffset, я вас понял...кажется

Добавлено через 3 часа 39 минут
DrOffset, не, чет не доходит, не работает...я так понял перегрузить один класс , второй класс, а затем в фасаде перегрузить операцию типов hex и bin...но не получается
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
27.02.2014, 00:26     Перегрузка - подчеркивает что ошибка здесь - a.strb #18
Цитата Сообщение от 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++ Что здесь не правильно?
Что здесь не так? C++
Что здесь не правильно? (переменные) C++
C++ Ребята что здесь неправильно?

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

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

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