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

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

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

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

26.02.2014, 18:43. Просмотров 691. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка - подчеркивает что ошибка здесь - a.strb (C++):

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

Ошибка подчеркивает this. - C++
Пишу код. Классы. Ошибка подчеркивает this . Подскажите как лучше ? #include<iostream> #include<Windows.h> #include <string> ...

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

подчеркивает запятую после 50, что это может быть? - C++
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <conio.h> #include "graphics.h" void main(void) { int...

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

Строку с методом подчеркивает и говорит о том, что не переданы аргументы. Как их передать в метод? - C++
метод таков: void Fraction :: Control(int &denominator, int &numerator) { if (denominator == 0) {cout << "error!try again!"<<endl;} ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,993
Записей в блоге: 27
26.02.2014, 18:45 #2
А компилировали? Что пишет компилятор?
И можно класс целиком?
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 18:46  [ТС] #3
Тамика, пишет, что a должен быть целочисленным, хотя мне нужно сложить два числа, которые находятся в двух разных классах

там 4 класса, поэтмоу проблематично будет
0
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,993
Записей в блоге: 27
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
7155 / 4296 / 972
Регистрация: 30.01.2014
Сообщений: 7,101
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
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,993
Записей в блоге: 27
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
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,993
Записей в блоге: 27
26.02.2014, 18:59 #9
Цитата Сообщение от RayPas Посмотреть сообщение
strh + a.strb;
Оператор "+" используется для целочисленных значений, да. Потому как бы ожидаемо. Перегрузите его сначала, а потом используйте. Я думаю, что программка не может сложить два как-то С_StringB и C_StringН.
0
S_el
2100 / 1611 / 308
Регистрация: 15.12.2013
Сообщений: 6,451
26.02.2014, 19:02 #10
А разве в вашем перегруженном операторе не должно быть оператора
C++
1
return
?
0
DrOffset
7155 / 4296 / 972
Регистрация: 30.01.2014
Сообщений: 7,101
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!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 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
7155 / 4296 / 972
Регистрация: 30.01.2014
Сообщений: 7,101
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2014, 20:40
Привет! Вот еще темы с ответами:

скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? - C++
скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? //анализируем все клетки доски for(int i = 0; i < 8;...

Что здесь не так - C++
Я хотел сделать программу для сложения двух чисел. после ввода второго слагаемого окно пропадает, я не могу найти свою ошибку Помогите...

Что здесь не так? - C++
// xc.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" // Таблица функции #include<math.h> ...

Что здесь не правильно? - C++
#include <iosteam.h> int main(){ float x = 1; cout << "sizeof (float) :" << sizeof (float); cout << "\nsizeof x :" <<...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.02.2014, 20:40
Ответ Создать тему
Опции темы

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