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

класс Вектор - C++

Восстановить пароль Регистрация
 
ADVIRUS
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 21
25.06.2013, 20:53     класс Вектор #1
всем привет.
Начинаю делать домашку :-) в классе вектор создаю метод:
cVector.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class cVector
{
public:
    cVector();              //конструктор по умолчанию
    cVector(const cVector &tmp);        //конструктор копий
    cVector(const double arr[], int size);               //конструктор c параметрами
    ~cVector();
    friend ostream& operator<<(ostream& out, const cVector & tmp);
    friend istream& operator>>(istream& in, cVector & tmp);
private:
    double *arr;    //вектор
    int size;       // размер вектора
 
};
cVector.cpp
C++
1
2
3
4
5
6
ostream& operator<<(ostream& out, const cVector & tmp)  
{
    for(int i=0;i<tmp.Length();++i)
        out << &tmp[i] << " ";
    return out;
}
Вроде все нормально.. но вот при компиляции слишком много ошибок у меня, во вложении пример.
И все цепляется к моим перегруженным операторам IO (>> <<)
Кто в курсе что не так?
Миниатюры
класс Вектор  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2013, 20:53     класс Вектор
Посмотрите здесь:

Класс Вектор C++
Класс вектор C++
Класс Вектор C++
C++ Класс-вектор в С++
C++ Класс вектор
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
25.06.2013, 20:58     класс Вектор #2
@ADVIRUS, на вскидку, в заголовочном файле нет объявлений istream и ostream (#include <iosfwd>) + они объявлены в пространстве имён std, которое надо указывать (std::istream, std::ostream).
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,410
25.06.2013, 21:05     класс Вектор #3

Не по теме:

Никогда не думал, что кто-то пользуется IE как основным браузером


std::ostream, #include <iostream>

и не было бы лишним увидеть реализацию данных перегруженных операторов

Добавлено через 57 секунд
Цитата Сообщение от ADVIRUS Посмотреть сообщение
out << &tmp[i] << " ";
out << tmp[i];
gray_fox
25.06.2013, 21:09
  #4

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
Никогда не думал, что кто-то пользуется IE как основным браузером
Да он не так уж и плох вроде сейчас (на предыдущей работе было требование, что бы веб-интерфейс работал в первую очередь в осле), хотя всё равно самый неудобный, как по мне...)

ADVIRUS
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 21
26.06.2013, 10:05  [ТС]     класс Вектор #5
Цитата Сообщение от gray_fox Посмотреть сообщение
@ADVIRUS, на вскидку, в заголовочном файле нет объявлений istream и ostream (#include <iosfwd>) + они объявлены в пространстве имён std, которое надо указывать (std::istream, std::ostream).
В файл main.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "cVector.h"
#include "func.h"
#include <iostream>
#include <conio.h>
#include <ctime>
 
using namespace std;
 
void main()
{
 
}
cVector.cpp
C++
1
2
3
#include "cVector.h"
#include <iostream>
using namespace std;
Что и где еще нужно дописывать?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.06.2013, 10:13     класс Вектор #6
@ADVIRUS, у Вас класс объявлен в cVector.h, туда же надо и #include <iosfwd> сделать.
ADVIRUS
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 21
26.06.2013, 10:13  [ТС]     класс Вектор #7
Цитата Сообщение от MrGluck Посмотреть сообщение

Не по теме:

Никогда не думал, что кто-то пользуется IE как основным браузером


std::ostream, #include <iostream>

и не было бы лишним увидеть реализацию данных перегруженных операторов

Добавлено через 57 секунд

out << tmp[i];
так вот я писал реализацию оператора <<

cVector.cpp
C++
1
2
3
4
5
6
ostream& operator<<(ostream& out, const cVector & tmp)  
{
    for(int i=0;i<tmp.Length();++i)
        out << &tmp[i] << " ";
    return out;
}
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
26.06.2013, 10:43     класс Вектор #8
@ADVIRUS,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
 
#include <iosfwd>
 
class cVector
{
public:
    cVector();              //конструктор по умолчанию
    cVector(const cVector &tmp);        //конструктор копий
    cVector(const double arr[], int size);               //конструктор c параметрами
    ~cVector();
    friend std::ostream& operator<<(std::ostream& out, const cVector & tmp);
    friend std::istream& operator>>(std::istream& in, cVector & tmp);
private:
    double *arr;    //вектор
    int size;       // размер вектора
 
};
ADVIRUS
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 21
26.06.2013, 13:31  [ТС]     класс Вектор #9
Цитата Сообщение от gray_fox Посмотреть сообщение
@ADVIRUS,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
 
#include <iosfwd>
 
class cVector
{
public:
    cVector();              //конструктор по умолчанию
    cVector(const cVector &tmp);        //конструктор копий
    cVector(const double arr[], int size);               //конструктор c параметрами
    ~cVector();
    friend std::ostream& operator<<(std::ostream& out, const cVector & tmp);
    friend std::istream& operator>>(std::istream& in, cVector & tmp);
private:
    double *arr;    //вектор
    int size;       // размер вектора
 
};
Дописал #include <iosfwd> в файле cVector.h
Не помогло :-(
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.06.2013, 14:13     класс Вектор #10
@ADVIRUS, скиньте проект полностью.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
26.06.2013, 14:53     класс Вектор #11

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
Никогда не думал, что кто-то пользуется IE как основным браузером
Последний IE может ещё и дать фору др. бразуерам по некоторым параметрам.



@ADVIRUS, допиши реализацию при месте, всё равно friend функции, те напиши прямо в классе
C++
1
2
3
4
 friend std::ostream& operator<<(std::ostream& out, const cVector & tmp)
{
//твоя реализация
}
ADVIRUS
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 21
26.06.2013, 15:23  [ТС]     класс Вектор #12
Цитата Сообщение от Tulosba Посмотреть сообщение
@ADVIRUS, скиньте проект полностью.
Оказывается надо было дописать еще:
using namespace std;

Спасибо всем - работает уже.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
26.06.2013, 15:28     класс Вектор #13
Цитата Сообщение от ADVIRUS Посмотреть сообщение
Оказывается надо было дописать еще:
using namespace std;
Не обязательно, вероятно хватило бы
using std::istream;
using std::ostream;

и это было бы более правильным решением по оформлению самого файла.

Хотя нет, вижу вы их указали сразу при перегрузке, тогда у вас что-то кроме потоков используеться без указания пространства имён std, но не имея самого проекта это сложно определить.
voipp
0 / 0 / 0
Регистрация: 30.04.2011
Сообщений: 68
26.06.2013, 16:35     класс Вектор #14
Вы изначально пошли по неудачному пути проектирования.

Вот как надо:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class A
{
...
public:
std::ostream& print();
 
...
}
 
std::ostream& operator<< (std::ostream& s , A &a)
{
return a.print();
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.06.2013, 16:39     класс Вектор #15
@voipp, штоа? А поток вывода как print() получит?
Croessmah
26.06.2013, 16:42
  #16

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
А поток вывода как print() получит?
так как и нужно при правильном проектировании
C++
1
2
3
std::ostream & A::print(){
   return std::cout;
}

Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.06.2013, 16:46     класс Вектор #17
@Croessmah, а если серьёзно, то имеет смысл в классе сделать виртуальный print(), который принимает std::ostream. А в самом operator<< уже его и вызывать. Видимо @voipp где-то как раз об этом читал, но донести до нас правильно не смог.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
26.06.2013, 16:53     класс Вектор #18
Глубоко копаете в советах как для начинающего, все эти демагогии по поводу того как правильно, а как нет

Не по теме:

,особенно от тех кто и сам не знает как правильно

.

@voipp, очень полезный print, особенно если сделать вот так:
C++
1
2
3
ofstream oFile;
A a;
oFile<<a;//ой, а что это вывелось в консоль, я же в файл хотел. Ой а print то и не в курсе что потоки разные бывают, он всё в cout пихает, вх. аргументом он же потока не принимает.
voipp
0 / 0 / 0
Регистрация: 30.04.2011
Сообщений: 68
26.06.2013, 17:04     класс Вектор #19
Прошу прощения. Я неверно функцию написал.
В общем виде можно ей параметр передавать
C++
1
2
3
4
std::ostream& operator<< (std::ostream& s , A &a)
{
        return a.print( s ); 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2013, 02:18     класс Вектор
Еще ссылки по теме:

C++ Класс вектор
C++ Класс вектор
C++ Нужно реализовать класс "вектор" с конструкторами, которые позволяют создать нулевой вектор и вектор с произвольным кол-во элементов.

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

Или воспользуйтесь поиском по форуму:
gray_fox
27.06.2013, 02:18     класс Вектор
  #20

Не по теме:

Цитата Сообщение от Gepar Посмотреть сообщение
Не обязательно, вероятно хватило бы
using std::istream;
using std::ostream;
и это было бы более правильным решением по оформлению самого файла.
Более правильным решением было бы таки не использовать using в заголовочных файлах вообще

Yandex
Объявления
27.06.2013, 02:18     класс Вектор
Ответ Создать тему
Опции темы

Текущее время: 13:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru