50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
1

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

03.09.2013, 16:20. Показов 2212. Ответов 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;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.09.2013, 16:20
Ответы с готовыми решениями:

Ostream istream
Народ объясните пожалуйста на пальцах что это и для чего это нужно friend ostream&amp; operator&lt;&lt;...

istream, ostream
Есть задача по сохранению в файл и восстановлении из файла объекта. Функции надо сделать такие:...

Перегрузка дружественных операторов istream ostream
Проблема следующая. Выдает ошибку 1&gt;Source.obj : error LNK2019: ссылка на неразрешенный внешний...

Как правильно унаследовать ostream, istream ?
Ну вообщем цель такова, чтобы в функцию можно было передать либо обьект моего класса, либо же cout...

10
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
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&);
2
50 / 31 / 4
Регистрация: 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"
0
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
03.09.2013, 16:41 4
Цитата Сообщение от MousePro Посмотреть сообщение
Проблема не решилась(
а ты читать умеешь? опечатка же
Цитата Сообщение от MousePro Посмотреть сообщение
ofsream
ofstream
1
8 / 8 / 0
Регистрация: 14.08.2013
Сообщений: 99
03.09.2013, 16:44 5
а не нужно еще эту библ. подключить?
C++
1
include"fstream"
0
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
03.09.2013, 16:50  [ТС] 6
Вроде бы нет)
0
8 / 8 / 0
Регистрация: 14.08.2013
Сообщений: 99
03.09.2013, 16:56 7
Просто я когда работал с ofstream i ifstream, то подключал, потому что это базовые классы библ. fstream и у меня, кстати, тоже MVS2010, только не знаю имеет-ли это значение
0
8 / 8 / 1
Регистрация: 06.07.2013
Сообщений: 21
03.09.2013, 16:59 8
ммм...
C++
1
using namespace std;
пропробуй дописать.

+ у тебя перегруженные операторы >> и << стоят в privat, перенеси их в public
0
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
03.09.2013, 17:01  [ТС] 9
Цитата Сообщение от Jupiter Посмотреть сообщение
а ты читать умеешь? опечатка же
тогда уже ostream
0
8 / 8 / 0
Регистрация: 14.08.2013
Сообщений: 99
03.09.2013, 17:02 10
Цитата Сообщение от Rogov Посмотреть сообщение
ммм...
Код C++
1
using namespace std;
пропробуй дописать
не думаю, что нужно, он же всюду пишет вручную std::cout...
0
50 / 31 / 4
Регистрация: 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;
Вот рабочий вариант
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2013, 17:04

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

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

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

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


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

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

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