С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
1

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

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

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


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

Что такое перегрузка оператора? Что у меня в коде за ошибка?
Что же я написал?? Что оно не компилится? Что значит error C2275: Superclass:...

Ошибка подчеркивает this.
Пишу код. Классы. Ошибка подчеркивает this . Подскажите как лучше ? ...

else подчеркивает и пишет что требуется оператор
else почему подчеркивает и пишет что требуется оператор

подчеркивает запятую после 50, что это может быть?
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <conio.h>...

Слишком много аргументов в вызове функции, подчеркивает то что красным
KVITANSIA.H class KVITANTSIA { public: int number; // номер int day,...

21
Тамика
Котовчанин
928 / 469 / 199
Регистрация: 16.02.2010
Сообщений: 3,304
Записей в блоге: 31
26.02.2014, 18:45 2
А компилировали? Что пишет компилятор?
И можно класс целиком?
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 18:46  [ТС] 3
Тамика, пишет, что a должен быть целочисленным, хотя мне нужно сложить два числа, которые находятся в двух разных классах

там 4 класса, поэтмоу проблематично будет
0
Тамика
Котовчанин
928 / 469 / 199
Регистрация: 16.02.2010
Сообщений: 3,304
Записей в блоге: 31
26.02.2014, 18:48 4
C++
1
a.strb
- можно хотя бы кусок, где Вы описываете эту переменную.
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 18:50  [ТС] 5
Тамика,
C++
1
2
3
4
void Texts :: Textsassign() {
      strb = new C_StringB; 
      strh = new C_StringH;
    }
0
DrOffset
9015 / 4861 / 1197
Регистрация: 30.01.2014
Сообщений: 7,943
26.02.2014, 18:57 6
RayPas,
Все понял, надо разыменовать указатели, чтобы работало.

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

Добавлено через 56 секунд
Тамика, ну потому что это правила перегрузки, один объект вызовет ее , другой передаст в функ-ю перегузки
0
Тамика
Котовчанин
928 / 469 / 199
Регистрация: 16.02.2010
Сообщений: 3,304
Записей в блоге: 31
26.02.2014, 18:59 9
Цитата Сообщение от RayPas Посмотреть сообщение
strh + a.strb;
Оператор "+" используется для целочисленных значений, да. Потому как бы ожидаемо. Перегрузите его сначала, а потом используйте. Я думаю, что программка не может сложить два как-то С_StringB и C_StringН.
0
S_el
2220 / 1683 / 354
Регистрация: 15.12.2013
Сообщений: 6,694
26.02.2014, 19:02 10
А разве в вашем перегруженном операторе не должно быть оператора
C++
1
return
?
0
DrOffset
9015 / 4861 / 1197
Регистрация: 30.01.2014
Сообщений: 7,943
26.02.2014, 19:06 11
Цитата Сообщение от RayPas Посмотреть сообщение
неее, все прекрасно было, до написания этого оператора
Тогда давай весь код, мы же не школе шпионов, чтобы паяльником из тебя инфу тянуть

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

Добавлено через 57 минут
ребят,хочется самому дойти, просто подскажите что делать, когда нам надо перегрузить не поля класса, а объекты со своими полями другого класса?
0
gray_fox
What a waste!
1554 / 1259 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
26.02.2014, 20:17 13
Цитата Сообщение от RayPas Посмотреть сообщение
что делать, когда нам надо перегрузить не поля класса, а объекты со своими полями другого класса?
нельзя перегрузить поля и объекты, так что совершенно не понятно, что ты пытаешься сделать...
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 20:21  [ТС] 14
gray_fox, у меня есть класс 16ричной строки и класс битовой. Их баз.класс - Строка.В Фасаде (в котором я пытаюсь описать операцию перегрузки сложения двух строк разных типов) я так предлпологаю и надо перегружать , т.к. в базовом классе Строка нельзя - так как это абстрактный класс
0
DrOffset
9015 / 4861 / 1197
Регистрация: 30.01.2014
Сообщений: 7,943
26.02.2014, 20:40 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;
};
1
gray_fox
What a waste!
1554 / 1259 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
26.02.2014, 20:42 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
   }
 
   // ...
};
1
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
27.02.2014, 00:24  [ТС] 17
DrOffset, я вас понял...кажется

Добавлено через 3 часа 39 минут
DrOffset, не, чет не доходит, не работает...я так понял перегрузить один класс , второй класс, а затем в фасаде перегрузить операцию типов hex и bin...но не получается
0
DrOffset
9015 / 4861 / 1197
Регистрация: 30.01.2014
Сообщений: 7,943
27.02.2014, 00:26 18
Цитата Сообщение от RayPas Посмотреть сообщение
не, чет не доходит, не работает
Я бы рад помочь, но без кода остается только гадать...
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
27.02.2014, 17:14  [ТС] 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) надо сложить в фасадном классе
0
Kuzia domovenok
2421 / 2151 / 525
Регистрация: 25.03.2012
Сообщений: 7,756
Записей в блоге: 1
27.02.2014, 17:36 20
Автор, ты бредишь! Напиши просто класс "строка" и не выпендривайся с наследованием! А что такое "фасадный класс" тут никто не поймёт.
0
27.02.2014, 17:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2014, 17:36

Строку с методом подчеркивает и говорит о том, что не переданы аргументы. Как их передать в метод?
метод таков: void Fraction :: Control(int &denominator, int &numerator) { ...

скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что?
скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? ...

Что здесь не так?
// xc.cpp: определяет точку входа для консольного приложения. // #include...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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