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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2010, 12:56   #1
DartDayring
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 55
По умолчанию Ошибка при перегрузке << и >>

Есть класс с вложенной структурой. При перегрузке <<, >> в однофайловым проекте все работает
Код:
#include "stdafx.h"
#include "iostream"
#include "stdafx.h" 
#include <iomanip> 
#include "fstream" 
using namespace std;
 
 
class Worker 
{
 
public: 
        struct base 
{ 
        char name[50]; 
        char post[25]; 
        int year; 
}; 
 
                Worker(){}; 
 
        base *obj; 
 
        ~Worker() 
        { 
                delete[] obj;
        } 
 
 
                Worker & operator =(Worker  &obj);
 
                friend ostream & operator<< (ostream & output, Worker  & a);
 
                friend istream & operator>> (istream & input, Worker  & a);
                                
 
}; 
 
 
   istream & operator>> (istream & input, Worker  & a)
   {
            int N=3; 
                a.obj=new Worker::base[N];
 
        for (int n = 0; n<3; n++) 
        { 
                        cout<<"Введите фамилию и инициалы работника: "; 
                        input>>a.obj[n].name; 
                        cout<<"Введите должность: "; 
                        input>>a.obj[n].post; 
                        cout<<"Введите год поступления на работу: "; 
                        input>>a.obj[n].year; 
        } 
        return input;
   }
 
 
   ostream & operator<< (ostream & output, Worker  & a)
   {
           for(int i=0; i<3; i++) 
           {
                   output <<"\n-----------------------------------------\n"; 
                   output <<"|\t Ф.И.О \t|\t Должность \t|\t Год п.р \t|\n"; 
                   output <<"-------------------------------------------\n"; 
                   output <<"|\t"<<a.obj[i].name<<"\t|\t"<<a.obj[i].post<<"\t|\t"<<a.obj[i].year<<"\t|\n"; 
                   output <<"-------------------------------------------\n"; 
           }
 
           return output;
   }
 
 
int _tmain(int argc, _TCHAR* argv[]) 
{
 
 
        Worker a;
        cin >> a;
        
        cout << a << endl;
 
}
Но при разбиении на файлы

main
Код:
#include "stdafx.h"
#include "iostream"
#include "stdafx.h" 
#include <iomanip> 
#include "fstream" 
#include "1.h" 
using namespace std;
 

int _tmain(int argc, _TCHAR* argv[]) 
{
 
 
        Worker a;
        cin >> a;
        
        cout << a << endl;
 
}
1.h
Код:

class Worker 
{
 
public: 
        struct base 
{ 
        char name[50]; 
        char post[25]; 
        int year; 
}; 
 
                Worker(){}; 
 
        base *obj; 
 
        ~Worker() 
        { 
                delete[] obj;
        } 
 
 
                Worker & operator =(Worker  &obj);
 
                friend ostream & operator<< (ostream & output, Worker  & a);
 
                friend istream & operator>> (istream & input, Worker  & a);
                                
 
};
2.cpp
Код:
#include "stdafx.h"
#include "iostream"
#include <iomanip> 
#include "fstream" 
#include "1.h"
using namespace std;
 
 
istream & operator>> (istream & input, Worker  & a)
   {
            int N=3; 
                a.obj=new Worker::base[N];
 
        for (int n = 0; n<3; n++) 
        { 
                        cout<<"Введите фамилию и инициалы работника: "; 
                        input>>a.obj[n].name; 
                        cout<<"Введите должность: "; 
                        input>>a.obj[n].post; 
                        cout<<"Введите год поступления на работу: "; 
                        input>>a.obj[n].year; 
        } 
        return input;
   }
 
 
   ostream & operator<< (ostream & output, Worker  & a)
   {
           for(int i=0; i<3; i++) 
           {
                   output <<"\n-----------------------------------------\n"; 
                   output <<"|\t Ф.И.О \t|\t Должность \t|\t Год п.р \t|\n"; 
                   output <<"-------------------------------------------\n"; 
                   output <<"|\t"<<a.obj[i].name<<"\t|\t"<<a.obj[i].post<<"\t|\t"<<a.obj[i].year<<"\t|\n"; 
                   output <<"-------------------------------------------\n"; 
           }
 
           return output;
   }
DartDayring вне форума Ответить с цитированием
Старый 07.12.2010, 13:00   #2
DartDayring
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 55
По умолчанию

Компилятор выдает кучу ошибок
Код:
1>------ Построение начато: проект: пробник, Конфигурация: Debug Win32 ------
1>Построение начато 07.12.2010 1:39:36.
1>InitializeBuildStatus:
1>  Создание "Debug\пробник.unsuccessfulbuild", так как было задано "AlwaysCreate".
1>ClCompile:
1>  Для всех выходных данных обновления не требуется.
1>  пробник.cpp
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(24): error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(24): error C2433: ostream: "friend" не разрешается для объявлений данных
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(24): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(24): error C2061: синтаксическая ошибка: идентификатор "ostream"
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(24): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(24): error C2805: бинарный "operator <<" имеет слишком мало параметров
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26): error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26): error C2433: istream: "friend" не разрешается для объявлений данных
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26): error C2061: синтаксическая ошибка: идентификатор "istream"
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26): error C2805: бинарный "operator >>" имеет слишком мало параметров
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\пробник.cpp(24): error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream" (или приемлемое преобразование отсутствует)
1>          c:\program files\microsoft visual studio 10.0\vc\include\istream(1053): может быть "std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &&,signed char *)"

1>  2.cpp
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(24): error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(24): error C2433: ostream: "friend" не разрешается для объявлений данных
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(24): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(24): error C2061: синтаксическая ошибка: идентификатор "ostream"
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(24): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(24): error C2805: бинарный "operator <<" имеет слишком мало параметров
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26): error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26): error C2433: istream: "friend" не разрешается для объявлений данных
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26): error C2061: синтаксическая ошибка: идентификатор "istream"
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26): error C2805: бинарный "operator >>" имеет слишком мало параметров
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник
DartDayring вне форума Ответить с цитированием
Старый 07.12.2010, 13:01   #3
DartDayring
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 55
По умолчанию

Код:
\2.cpp(9): error C2872: istream: неоднозначный символ
1>          может быть "c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26) : int istream"
1>          или       "c:\program files\microsoft visual studio 10.0\vc\include\iosfwd(635) : std::istream"
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\2.cpp(9): error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\2.cpp(9): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\2.cpp(9): error C2086: int istream: переопределение
1>          c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26): см. объявление "istream"
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\2.cpp(9): error C2872: istream: неоднозначный символ
1>          может быть "c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26) : int istream"
1>          или       "c:\program files\microsoft visual studio 10.0\vc\include\iosfwd(635) : std::istream"
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\2.cpp(9): error C2872: istream: неоднозначный символ
1>          может быть "c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(26) : int istream"
1>          или       "c:\program files\microsoft visual studio 10.0\vc\include\iosfwd(635) : std::istream"
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\2.cpp(9): error C2065: input: необъявленный идентификатор
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\2.cpp(9): error C2065: a: необъявленный идентификатор
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\2.cpp(9): error C2275: Worker: недопустимое использование этого типа в качестве выражения
1>          c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\1.h(2): см. объявление "Worker"
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\2.cpp(9): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\admin\documents\visual studio 2010\projects\пробник\пробник\2.cpp(9): fatal error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции
1>  Создание кода...
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:01.29
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
[/CODE]
DartDayring вне форума Ответить с цитированием
Старый 07.12.2010, 13:12   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Ну так включите в h-файл iostream
Код:
#include <iostream>
Кстати, iostream и fstream, а равно и все прочие стандартные заголовочники нужно включать в угловых скобках, а в кавычках.
И еще - где стражи включения в 1.h?
Код:
#pragma once

//Остальной код
или
Код:
#ifndef SOME_HEADER_FILE_IDENTIFICATOR
#define SOME_HEADER_FILE_IDENTIFICATOR

//Остальной код

#endif
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 07.12.2010, 13:19   #5
DartDayring
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 55
По умолчанию

Не помогло
DartDayring вне форума Ответить с цитированием
Старый 07.12.2010, 16:41   #6
DartDayring
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 55
По умолчанию

help
Понятия не имею в чем дело
DartDayring вне форума Ответить с цитированием
Старый 07.12.2010, 17:07   #7
DartDayring
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 55
По умолчанию

Проблему решил подключив
Код:
using namespace std;
в h файле
DartDayring вне форума Ответить с цитированием
Старый 06.12.2020, 09:25   #8
Shurup Josephson
Новичок
Джуниор
 
Регистрация: 06.12.2020
Сообщений: 1
По умолчанию

Три дня рыл интернет в поисках точно такой же ошибки. Спасибо за решение!
Shurup Josephson вне форума Ответить с цитированием
Старый 07.12.2020, 13:42   #9
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 950
По умолчанию

Shurup Josephson, покажи код, про какую ошибку речь?

А то вот эта самая строка - это тоже ошибка (чаще всего)
Код:
using namespace std;
нужно указывать неймспейс std::
Алексей1153 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка при исполнении (что то при установке компонентов) designer999 Компоненты Delphi 0 18.10.2010 22:03
Ошибка при компиляции Stripped Помощь студентам 4 21.07.2010 17:25
Ошибка при AddFormField greatilya Общие вопросы Delphi 1 18.07.2010 14:21
ошибка при фильтрации Screame Microsoft Office Excel 31 14.08.2009 10:10
Типы аргументов при перегрузке функций Arkuz Общие вопросы C/C++ 4 24.02.2009 01:16