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

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

Войти
Регистрация
Восстановить пароль
 
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
#1

Пример с книги, ругается на istream и ostream - C++

03.09.2013, 16:20. Просмотров 969. Ответов 10
Метки нет (Все метки)

Создание класса массива с перезагрузкой операций, ругается на istream и ostream.
Переписал все с книги, но VS2010 не компилит.

Array.h
Кликните здесь для просмотра всего текста
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
#include <iostream>
#ifndef ARRAY_H
#define ARRAY_H
class Array
{
    friend ofsream &operator<<(ostream &,const Array &);
    friend ifsream &operator>>(istream &, Array & );
 
public :
    Array(int = 10);
    Array(const Array &);
    ~Array();
    int Getsize()const;
    const Array & operator =(const Array&);
    int operator ==(const Array &) const;
    int operator !=(const Array &)const ;
    int &operator [] (int);
    static int GetArrayCount();
private:
    int *ptr;
    int size;
    static int arrayCount;
};
#endif

Array.cpp

Кликните здесь для просмотра всего текста
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include "Array.h"
#include <iostream>
#include "stdlib.h"
#include "assert.h"
 
int Array::arrayCount=0;
 
Array::Array(int arraySize)
{
    setlocale(LC_ALL,"Russian");
    ++arrayCount;
    size=arraySize;
    ptr= new int[size];
    assert(ptr!=0);
    std::cout<<"Конструктор Класса"<<"\n";
    for(int x=0;x<size;x++)
        ptr[x]=0;
    
}
Array::Array(const Array& init)
{
    setlocale(LC_ALL,"Russian");
++arrayCount;
size=init.size;
ptr= new int[size];
assert(ptr!=0);
std::cout<<"Конструктор Класса Копии"<<"\n";
for(int x=0;x<size;x++)
    ptr[x]=init.ptr[x];
}
Array::~Array()
{
    --arrayCount;
    delete [] ptr;
}
int Array::Getsize()const 
{return size;}
const Array &Array::operator=(const Array& right)
{
    setlocale(LC_ALL,"Russian");
    std::cout<<"Перезагрузка оператора = "<<"\n";
    if(&right!=this)
    {
        delete [] ptr;
        size=right.size;
 
        ptr=new int[size];
        
        for(int x=0;x<size;x++)
    ptr[x]=right.ptr[x];
    }
    return *this
}
int Array:: operator==(const Array &right)const
{
    setlocale(LC_ALL,"Russian");
    std::cout<<"Перезагрузка оператора =="<<"\n";
    if(size!=right.size)
        return 0;
    for( int x=0; x<size;x++)
    {
        if(ptr[x]!=right.ptr[x])
            return 0;
    }
    return 1;
}
int Array:: operator!=(const Array &right)const
{
    setlocale(LC_ALL,"Russian");
 
    std::cout<<"Перезагрузка оператора != "<<"\n";
        if(size!=right.size)
        return 1;
    for( int x=0; x<size;x++)
    {
        if(ptr[x]!=right.ptr[x])
            return 1;
    }
    return 0;
}
int &Array::operator[](int subscript)
{
    assert (0 <= subscript && subscript <size);
    return ptr[subscript];
}
istream  &operator>>(istream &input, Array &a)
{
    for(int x=0;x<a.size;x++)
    input>>a.ptr[x];
    return input;
}
ostream  &operator<<(ostream & output,const Array &a)
{
    for (int x=0;x<a.size;x++)
    {
        output<<a.ptr[x]<<" ";
        if((x+1)%10==0)
            output<<"/n";
    }
    if(x%10!=0)
            output<<"/n";
    return output;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2013, 16:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пример с книги, ругается на istream и ostream (C++):

istream, ostream - C++
Есть задача по сохранению в файл и восстановлении из файла объекта. Функции надо сделать такие: void Serialize(std::ostream &amp; stream); //...

Как правильно унаследовать ostream, istream ? - C++
Ну вообщем цель такова, чтобы в функцию можно было передать либо обьект моего класса, либо же cout , cin. MyStream mout = MyStream(); ...

Разница между istream::putback и istream::unget - C++
Можете объяснить, пожалуйста, разницу этих двух функций?

ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? - C++
void Array::getArray() // вывод массива { for (int ix = 0; ix &lt; size; ix++) cout &lt;&lt; setw(5) &lt;&lt; ptr; // вывод элементов...

friend ostream &operator<<(ostream &stream, MyClass o); - C++
Что означает данная строчка которую обычно пишут в конце класса? friend ostream &amp;operator&lt;&lt;(ostream &amp;stream, MyClass o);

Friend ostream& operator<<(ostream& stream, CArr& obj); - C++
CArr.h #pragma once class CArr{ int* arr = nullptr; int size = 10; void swap(int *a, int *b); void swap(int &amp;a, int &amp;b); ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
03.09.2013, 16:30 #2
C++
1
2
3
4
5
6
7
8
9
#ifndef ARRAY_H
#define ARRAY_H
 
#include <iostream>
 
class Array
{
    friend std::ofsream& operator << (std::ostream&, const Array&);
    friend std::ifsream& operator >> (std::istream&, Array&);
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
03.09.2013, 16:37  [ТС] #3
Проблема не решилась(

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
std::istream &operator>>(std::istream &input, Array &a)
{
    for(int x=0;x<a.size;x++)
        input>>a.ptr[x];
    return input;
}
std::ostream &operator<<(std::ostream & output,const Array &a)
{
    for (int x=0;x<a.size;x++)
    {
        output<<a.ptr[x]<<" ";
        if((x+1)%10==0)
            output<<"/n";
    }
    if(x%10!=0)
            output<<"/n";
    return output;
}


Добавлено через 1 минуту
Ошибки

Кликните здесь для просмотра всего текста
> Array.cpp
1>c:\задачки\array\array\array.h(6): error C2039: ofsream: не является членом "std"
1>c:\задачки\array\array\array.h(6): error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
1>c:\задачки\array\array\array.h(6): error C2433: ofsream: "friend" не разрешается для объявлений данных
1>c:\задачки\array\array\array.h(6): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\задачки\array\array\array.h(6): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\задачки\array\array\array.h(6): error C2804: бинарный "operator <<" имеет слишком много параметров
1>c:\задачки\array\array\array.h(7): error C2039: ifsream: не является членом "std"
1>c:\задачки\array\array\array.h(7): error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
1>c:\задачки\array\array\array.h(7): error C2433: ifsream: "friend" не разрешается для объявлений данных
1>c:\задачки\array\array\array.h(7): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\задачки\array\array\array.h(7): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\задачки\array\array\array.h(7): error C2804: бинарный "operator >>" имеет слишком много параметров
1>c:\задачки\array\array\array.cpp(53): error C2143: синтаксическая ошибка: отсутствие ";" перед "}"
1>c:\задачки\array\array\array.cpp(88): error C2248: Array::size: невозможно обратиться к private член, объявленному в классе "Array"
1> c:\задачки\array\array\array.h(21): см. объявление "Array::size"
1> c:\задачки\array\array\array.h(5): см. объявление "Array"
1>c:\задачки\array\array\array.cpp(89): error C2248: Array:tr: невозможно обратиться к private член, объявленному в классе "Array"
1> c:\задачки\array\array\array.h(20): см. объявление "Array:tr"
1> c:\задачки\array\array\array.h(5): см. объявление "Array"
1>c:\задачки\array\array\array.cpp(94): error C2248: Array::size: невозможно обратиться к private член, объявленному в классе "Array"
1> c:\задачки\array\array\array.h(21): см. объявление "Array::size"
1> c:\задачки\array\array\array.h(5): см. объявление "Array"
1>c:\задачки\array\array\array.cpp(96): error C2248: Array:tr: невозможно обратиться к private член, объявленному в классе "Array"
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
03.09.2013, 16:41 #4
Цитата Сообщение от MousePro Посмотреть сообщение
Проблема не решилась(
а ты читать умеешь? опечатка же
Цитата Сообщение от MousePro Посмотреть сообщение
ofsream
ofstream
Atlant_V
8 / 8 / 1
Регистрация: 14.08.2013
Сообщений: 99
03.09.2013, 16:44 #5
а не нужно еще эту библ. подключить?
C++
1
include"fstream"
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
03.09.2013, 16:50  [ТС] #6
Вроде бы нет)
Atlant_V
8 / 8 / 1
Регистрация: 14.08.2013
Сообщений: 99
03.09.2013, 16:56 #7
Просто я когда работал с ofstream i ifstream, то подключал, потому что это базовые классы библ. fstream и у меня, кстати, тоже MVS2010, только не знаю имеет-ли это значение
Rogov
8 / 8 / 1
Регистрация: 06.07.2013
Сообщений: 21
03.09.2013, 16:59 #8
ммм...
C++
1
using namespace std;
пропробуй дописать.

+ у тебя перегруженные операторы >> и << стоят в privat, перенеси их в public
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
03.09.2013, 17:01  [ТС] #9
Цитата Сообщение от Jupiter Посмотреть сообщение
а ты читать умеешь? опечатка же
тогда уже ostream
Atlant_V
8 / 8 / 1
Регистрация: 14.08.2013
Сообщений: 99
03.09.2013, 17:02 #10
Цитата Сообщение от Rogov Посмотреть сообщение
ммм...
Код C++
1
using namespace std;
пропробуй дописать
не думаю, что нужно, он же всюду пишет вручную std::cout...
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
03.09.2013, 17:04  [ТС] #11
Цитата Сообщение от Rogov Посмотреть сообщение
ммм...
C++
1
using namespace std;
пропробуй дописать.

+ у тебя перегруженные операторы >> и << стоят в privat, перенеси их в public
std:: я сам дописываю
Там друзья класса.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
friend  std::ostream &operator<<(std::ostream&,const Array&);
friend  std::istream &operator>>(std::istream&, Array& );
 
std::istream &operator>>(std::istream &input,  Array &a)
{
    for(int x=0;x<a.size;x++)
    {
        input>>a.ptr[x];
    }
    return input;
}
std::ostream &operator<<(std::ostream &output, const Array &a)
{
    for (int x=0;x<a.size;x++)
    {
        output<<a.ptr[x]<<" ";
        if((x+1)%10==0)
            output<<"/n";
    }
    //if(x%10!=0)
            //output<<"/n";
    return output;
Вот рабочий вариант
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2013, 17:04
Привет! Вот еще темы с ответами:

Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) - C++
Добрый день. Как осуществляется выделения памяти под перегруженный оператор ввода данных в пользовательский тип? Ведь мы заранее не можем...

пример из книги - C++
#include &lt;iostream.h&gt; long summa (int k,...){ int *pik=&amp;k; char *pc=(char *)pik; cout &lt;&lt;&quot; *pc=&quot;&lt;&lt;*pc&lt;&lt;&quot;...

Простой пример из книги - C++
Решил сделать все задания Павловской Т.А. С/С++ и вот с самого первого примера не понял кое-что. Сама программа вылетает и не показывает...

Пример с книги не компилируется! - C++
Павловская Т.С. Пример (программа печатает таблицу значений функции г/=х2+1 во введенном диапазоне): ...


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

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

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