Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2017, 11:07   #1
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию Перегрузка бинарных операций.

Здравствуйте!
Переписал код из учебника с целью улучшения работы с клавиатурой))
Вроде ничего сложного и код вполне логичный. Даже подобные уже переписывал вроде.
Да вот беда, ошибку выдаёт компилятор!
На 43 строке, практически на ровном месте.
c:\documents and settings\admin\мои документы\visual studio 2008\projects\глава 8_4\глава 8_4\глава 8_4.cpp(43) : error C2679: бинарный '<<': не найден оператор, принимающий правый операнд типа 'void' (или приемлемое преобразование отсутствует)
Код:
#include<iostream>
#include<conio.h>
using namespace std;
class Distance
{
private:
	int feet;
	float inches;
public:
	Distance():feet(0), inches(0)
	{}
	Distance(int ft, float in): feet(ft), inches(in)
	{}
	void getdist()
	{
		cout<<"\nВведите футы: "; cin>>feet;
		cout<<"\nВведите дюймы: "; cin>>inches;
	}
	void showdist()
	{
		cout<<feet<<"\'-"<<inches<<"\"";
	}
	Distance operator+(Distance)const;
};
Distance Distance::operator +(Distance d2)const
{
	int f=feet+d2.feet;
	float i=inches+d2.inches;
	if (i>=12.0)
	{
		i-=12.0;
		f++;
	}
	return Distance (f,i);
}
int main()
{
	Distance dist1, dist3, dist4;
	dist1.getdist();
	Distance dist2(11, 6.25);
	dist3=dist1+dist2;
	dist4=dist1+dist2+dist3;
	cout<<"dist1="<<dist1.showdist(); cout<<endl;
	cout<<"dist2="<<dist2.showdist(); cout<<endl;
	cout<<"dist3="<<dist3.showdist(); cout<<endl;
	cout<<"dist4="<<dist4.showdist()<<endl;
	getch();
	return 0;
}
Кто-нибудь подскажите пожалуйста, в чем дело?
Может всё таки я перенес код не правильно?
KAMLS вне форума Ответить с цитированием
Старый 12.05.2017, 11:20   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так написано ж все в ошибке. Что ему выводить если showdist не возвращает ничего?
Вот если б там был return и не void, то работало бы. Только тогда логичнее назвать эту функцию getDist или просто dist.
Ну и консольный ввод/вывод убрать оттуда.

Как-то так:
Код:
#include <iostream>
#include <sstream>

using namespace std;

class Distance
{
private:
    const int feet;
    const float inches;
public:
    Distance(): feet(0), inches(0)
    {}
    Distance(int ft, float in): feet(ft), inches(in)
    {}

    int getFeet() const
    {
        return feet;
    }

    float getInches() const
    {
        return inches;
    }

    string getString() const
    {     
        ostringstream ss;
        ss << feet << "\'-" << inches << "\"";
        return ss.str();
    }

    Distance operator+(Distance)const;
};

Distance Distance::operator +(Distance d2)const
{
    int f = getFeet() + d2.getFeet();
    float i = getInches() + d2.getInches();
    if (i >= 12.0)
    {
        i -= 12.0;
        f++;
    }
    return Distance (f,i);
}

int main()
{
    int ft;
    float in;
    cout << "Enter feet: ";
    cin >> ft;
    cout << "Enter inches: ";
    cin >> in;

    Distance dist1(ft, in);
    Distance dist2(11, 6.25);
    Distance dist3 = dist1 + dist2;
    Distance dist4 = dist1 + dist2 + dist3;

    cout << dist1.getString() << endl;
    cout << dist2.getString() << endl;
    cout << dist3.getString() << endl;
    cout << dist4.getString() << endl;

    system("pause");
    return 0;
}
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 12.05.2017 в 15:12.
Alex11223 вне форума Ответить с цитированием
Старый 12.05.2017, 15:20   #3
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Я дико извиняюсь.....
Пока еще не очень понимаю то что пишет компилятор. Но после вашего объяснения еще раз внимательно осмотрел код Лафоре и увидел свой косяк.
Там вот так код написан:
Код:
cout<<"dist1="; dist1.showdist(); cout<<endl;
	cout<<"dist2="; dist2.showdist(); cout<<endl;
	cout<<"dist3="; dist3.showdist(); cout<<endl;
	cout<<"dist4="; dist4.showdist(); cout<<endl;
Еще раз извините за пустое беспокойство..
С таким кодом ошибок нет, и с вашим разъяснением понятно почему.
KAMLS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка операций Ивочка Помощь студентам 0 01.05.2013 16:36
Перегрузка операций C++ corner Помощь студентам 0 18.11.2012 17:14
Перегрузка операций manoichi Общие вопросы C/C++ 0 09.01.2012 19:30
Перегрузка бинарных операторов. Namolem Помощь студентам 1 15.09.2010 21:44
Перегрузка бинарных арифметических операторов шаблона класса NecroArt Помощь студентам 2 10.08.2010 21:31