Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отрезок - Перегрузка оператора << [C++] 
V
    Опции темы
ArniLand
Дата 25.4.2010, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 17.8.2008

Репутация: нет
Всего: нет



Написал программу по потокам с перезагрузкой оператора << по следующему заданию:
Цитата

Название класса - прямая
Описание класса - Координаты начала и конца, конструктор по умолчанию с введением координат, метод вычисления длины, метод вычисления угла с осью ОХ, метод выведения данных (перегрузка операции <<)


Программа выдает следующие ошибки, помогите их исправить пожалуйста.
Цитата

:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\laba 2.3 c++.cpp(20) : error C2470: 'Straight::GetLength' : looks like a function definition, but there is no parameter list; skipping apparent body
d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\laba 2.3 c++.cpp(25) : error C2063: 'Straight::GetOX' : not a function
main.cpp
d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\main.cpp(11) : error C2601: 'operator <<' : local function definitions are illegal
        d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\main.cpp(8): this line contains a '{' which has not yet been matched
d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\main.cpp(12) : error C2065: 'x1' : undeclared identifier
d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\main.cpp(13) : error C2065: 'x2' : undeclared identifier
d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\main.cpp(14) : error C2065: 'y1' : undeclared identifier
d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\main.cpp(15) : error C2065: 'y2' : undeclared identifier
d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\main.cpp(16) : error C2064: term does not evaluate to a function taking 0 arguments
d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\main.cpp(17) : error C2064: term does not evaluate to a function taking 0 arguments


Код программы:
Код

//Straight.h
#include <iostream>
using namespace std;

class Straight
{
private:
    double x1;
    double x2;
    double y1;
    double y2;
public:
    Straight(double ax1, double ax2, double ay1, double ay2);
    ~Straight();
    double GetLength;
    double GetOX;
    friend ostream &operator<<(ostream &stream, Straight obj);
};


//.cpp
#include "stdafx.h"
#include <iostream>
#include "Straight.h"
#include <math.h>

using namespace std;

Straight::Straight(double ax1, double ax2, double ay1, double ay2)
{
    x1 = ax1;
    x2 = ax2;
    y1 = ay1;
    y2 = ay2;
}

Straight::~Straight()
{}

double Straight::GetLength
{
    return sgrt((y2-y1)*(y2-y1)+(x2-x1)*(x2-x1));
}

double Straight::GetOX()
{
    return atan((y2-y1)/(x2-x1));
}

//main.cpp
#include "stdafx.h"
#include <iostream>
#include "Straight.h"

using namespace std;

int main()
{
    Straight obj(2.3, 1.2, 3.4, 4.5);
    ostream &operator<<(ostream &stream, Straight obj)
    {
        stream <<"x1 :" << x1 << "\n";
        stream <<"x2 :" << x2 << "\n";
        stream <<"y1 :" << y1 << "\n";
        stream <<"y2 :" << y2 << "\n";
        stream <<"Dlina :" << obj.GetLength() << "\n";
        stream <<"OX :" << obj.GetOX() << "\n";
        return stream;
    }
    return 0;
}








PM MAIL   Вверх
toxx
Дата 25.4.2010, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



Перегрузка оператора в main() ?
вынеси за main()
Код

ostream &operator<<(ostream &stream, Straight obj)
    {
        stream <<"x1 :" << x1 << "\n";
        stream <<"x2 :" << x2 << "\n";
        stream <<"y1 :" << y1 << "\n";
        stream <<"y2 :" << y2 << "\n";
        stream <<"Dlina :" << obj.GetLength() << "\n";
        stream <<"OX :" << obj.GetOX() << "\n";
        return stream;
    }


Это сообщение отредактировал(а) toxx - 25.4.2010, 18:39
PM MAIL   Вверх
ArniLand
Дата 25.4.2010, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 17.8.2008

Репутация: нет
Всего: нет



toxx,  извините за глупый вопрос, вы имеете виду перенести перегрузку в .cpp файл где находятся реализации методов?
PM MAIL   Вверх
toxx
Дата 25.4.2010, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



ArniLand
Да попробуйте так
PM MAIL   Вверх
ArniLand
Дата 25.4.2010, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 17.8.2008

Репутация: нет
Всего: нет



если я вынесу перегрузку << за main, не понятно, как мне потом в main реализовать вывод на экран координат, длины и угла?
PM MAIL   Вверх
toxx
Дата 25.4.2010, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



так, у вас же принимается объект вторым параметром
Код

cout<<obj<<endl;


Добавлено @ 18:47
И еще исправьте
Код

ostream &operator<<(ostream &stream, Straight &obj)

Код


ostream &operator<<(ostream &stream, Straight &obj)
    {
        stream <<"x1 :" << obj.x1 << "\n";
        stream <<"x2 :" << obj.x2 << "\n";
        stream <<"y1 :" << obj.y1 << "\n";
        stream <<"y2 :" << obj.y2 << "\n";
        stream <<"Dlina :" << obj.GetLength() << "\n";
        stream <<"OX :" << obj.GetOX() << "\n";
        return stream;
    }


Это сообщение отредактировал(а) toxx - 25.4.2010, 18:49
PM MAIL   Вверх
ArniLand
Дата 25.4.2010, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 17.8.2008

Репутация: нет
Всего: нет



то есть main будет выглядеть так?
Код

int main()
{
     Straight obj(2.1, 2.3, 2.5, 4.5)
     cout<<obj<<'\n';
     return 0;
}


PM MAIL   Вверх
toxx
Дата 25.4.2010, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



ArniLand
да, должно быть правильно.
PM MAIL   Вверх
ArniLand
Дата 25.4.2010, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 17.8.2008

Репутация: нет
Всего: нет



Вот исправил, но выдает такие ошибки, что я сделал не так?
Цитата

d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\laba 2.3 c++.cpp(20) : error C2470: 'Straight::GetLength' : looks like a function definition, but there is no parameter list; skipping apparent body
d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\laba 2.3 c++.cpp(31) : error C2248: 'Straight::x1' : cannot access private member declared in class 'Straight'
        d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\straight.h(7) : see declaration of 'Straight::x1'
        d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\straight.h(5) : see declaration of 'Straight'
d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\laba 2.3 c++.cpp(32) : error C2248: 'Straight::x2' : cannot access private member declared in class 'Straight'
        d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\straight.h(8) : see declaration of 'Straight::x2'
        d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\straight.h(5) : see declaration of 'Straight'
d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\laba 2.3 c++.cpp(33) : error C2248: 'Straight::y1' : cannot access private member declared in class 'Straight'
        d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\straight.h(9) : see declaration of 'Straight::y1'
        d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\straight.h(5) : see declaration of 'Straight'
d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\laba 2.3 c++.cpp(34) : error C2248: 'Straight::y2' : cannot access private member declared in class 'Straight'
        d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\straight.h(10) : see declaration of 'Straight::y2'
        d:\мои документы\visual studio 2008\projects\laba 2.3 c++\laba 2.3 c++\straight.h(5) : see declaration of 'Straight'


Код программы:
Код

//Straight.h
#include <iostream>
using namespace std;

class Straight
{
private:
    double x1;
    double x2;
    double y1;
    double y2;
public:
    Straight(double ax1, double ax2, double ay1, double ay2);
    ~Straight();
    double GetLength();
    double GetOX();
    friend ostream &operator<<(ostream &stream, Straight obj);
};

//.cpp
#include "stdafx.h"
#include <iostream>
#include "Straight.h"
#include <math.h>

using namespace std;

Straight::Straight(double ax1, double ax2, double ay1, double ay2)
{
    x1 = ax1;
    x2 = ax2;
    y1 = ay1;
    y2 = ay2;
}

Straight::~Straight()
{}

double Straight::GetLength
{
    return sgrt((y2-y1)*(y2-y1)+(x2-x1)*(x2-x1));
}

double Straight::GetOX()
{
    return atan((y2-y1)/(x2-x1));
}

ostream &operator<<(ostream &stream, Straight &obj)
    {
        stream <<"x1 :" << obj.x1 << "\n";
        stream <<"x2 :" << obj.x2 << "\n";
        stream <<"y1 :" << obj.y1 << "\n";
        stream <<"y2 :" << obj.y2 << "\n";
        stream <<"Dlina :" << obj.GetLength() << "\n";
        stream <<"OX :" << obj.GetOX() << "\n";
        return stream;
    }

//main.cpp
#include "stdafx.h"
#include <iostream>
#include "Straight.h"

using namespace std;

int main()
{
    Straight obj(2.3, 1.2, 3.4, 4.5);
    cout<<obj<<'\n';
    return 0;
}



Добавлено @ 19:16
Все исправил все ошибки, спасибо вам toxx за помощь. Модераторы добавьте пожалуйста + в репутацию toxx, не раз помогал мне, он заслужил.

Это сообщение отредактировал(а) ArniLand - 25.4.2010, 19:18
PM MAIL   Вверх
azesmcar
Дата 26.4.2010, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



toxx, 
Цитата(toxx @  25.4.2010,  18:47 Найти цитируемый пост)
И еще исправьте
Выделить всёкод C++
1:
    
ostream &operator<<(ostream &stream, Straight &obj)

правильнее будет так
Код

ostream &operator<<(ostream &stream, const Straight &obj)


Цитата(ArniLand @  25.4.2010,  19:06 Найти цитируемый пост)
добавьте пожалуйста + в репутацию toxx

сделал
PM   Вверх
toxx
Дата 26.4.2010, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



azesmcar
эхх, только я подумал, что сделал всё правильно =)
PM MAIL   Вверх
azesmcar
Дата 26.4.2010, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(toxx @  26.4.2010,  17:55 Найти цитируемый пост)
эхх, только я подумал, что сделал всё правильно =) 

Как явился поручик...
 smile 
я доброго дела ради smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0557 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.