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

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

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

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

Добавлено через 56 секунд
Тамика, ну потому что это правила перегрузки, один объект вызовет ее , другой передаст в функ-ю перегузки
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
26.02.2014, 18:59     Перегрузка - подчеркивает что ошибка здесь - a.strb #9
Цитата Сообщение от RayPas Посмотреть сообщение
strh + a.strb;
Оператор "+" используется для целочисленных значений, да. Потому как бы ожидаемо. Перегрузите его сначала, а потом используйте. Я думаю, что программка не может сложить два как-то С_StringB и C_StringН.
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,920
26.02.2014, 19:02     Перегрузка - подчеркивает что ошибка здесь - a.strb #10
А разве в вашем перегруженном операторе не должно быть оператора
C++
1
return
?
DrOffset
6458 / 3832 / 885
Регистрация: 30.01.2014
Сообщений: 6,627
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
Сообщений: 367
26.02.2014, 20:04  [ТС]     Перегрузка - подчеркивает что ошибка здесь - a.strb #12
Тамика, не понял. перегрузить + для елочисленных сначала, а потом его использз-ть для этого типа? вот это как раз и не понятно...
и в каком классе описать первую перегрузку? в фасадном?

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

Добавлено через 3 часа 39 минут
DrOffset, не, чет не доходит, не работает...я так понял перегрузить один класс , второй класс, а затем в фасаде перегрузить операцию типов hex и bin...но не получается
DrOffset
6458 / 3832 / 885
Регистрация: 30.01.2014
Сообщений: 6,627
27.02.2014, 00:26     Перегрузка - подчеркивает что ошибка здесь - a.strb #18
Цитата Сообщение от RayPas Посмотреть сообщение
не, чет не доходит, не работает
Я бы рад помочь, но без кода остается только гадать...
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
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
Еще ссылки по теме:

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

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

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

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