1 / 1 / 0
Регистрация: 20.09.2017
Сообщений: 27
1

Перегрузка << в многофайловом проекте

18.02.2018, 21:35. Показов 1425. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Чтобы узнать, как перегружать потоки, зашел на msdn, нашел там это:

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
#include <iostream>  
using namespace std;  
  
class Date  
{  
    int mo, da, yr;  
public:  
    Date(int m, int d, int y)  
    {  
        mo = m; da = d; yr = y;  
    }  
    friend ostream& operator<<(ostream& os, const Date& dt);  
};  
  
ostream& operator<<(ostream& os, const Date& dt)  
{  
    os << dt.mo << '/' << dt.da << '/' << dt.yr;  
    return os;  
}  
  
int main()  
{  
    Date dt(5, 6, 92);  
    cout << dt;  
}
Не понимаю, почему перестает работать, когда создаю многофайловый проект, и разделяю код на 3 части:

Date. h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#pragma once
using namespace std;
 
class Date
{
public:
    int mo, da, yr;
 
    Date(int m, int d, int y)
    {
        mo = m; da = d; yr = y;
    }
    friend ostream& operator<<(ostream& os, const Date& dt);
};

Date.cpp
C++
1
2
3
4
5
6
7
8
9
#include "Date.h"
#include <iostream> 
using namespace std;
 
ostream& operator<<(ostream& os, const Date& dt)
{
    os << dt.mo << '/' << dt.da << '/' << dt.yr;
    return os;
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream> 
#include "Date.h"
using namespace std;
 
 
 
int main()
{
    Date dt(5, 6, 92);
    cout << dt;
 
    system("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2018, 21:35
Ответы с готовыми решениями:

Ошибки в многофайловом проекте
Здравствуйте! У меня есть многофайловый проект. Он не закончен (только начатый), но запуск...

Struct в многофайловом проекте
Если в main файле создать структуру, то как её использовать в функциях, которые в других cpp...

Ошибка LNK2019 в многофайловом проекте
Смысл: Мне нужно создать абстрактный класс контейнер, на его основе конкретные классы, далее...

Ошибка линковки в многофайловом проекте
что за на??? в проекте 3 модуля: main.cpp, test.cpp, test.h, в main.cpp и test.cpp подключен...

11
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
18.02.2018, 21:37 2
Цитата Сообщение от Uncleewe Посмотреть сообщение
Не понимаю, почему перестает работать
Наверное, что-то не нравится.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
18.02.2018, 21:54 3
Цитата Сообщение от Uncleewe Посмотреть сообщение
Не понимаю, почему перестает работать
Работать или компилироваться? Если компилироваться, то компилятор, наверное, что-то пишет о причинах?
1
1 / 1 / 0
Регистрация: 20.09.2017
Сообщений: 27
18.02.2018, 21:59  [ТС] 4
Да, пишет:
error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
error C2433: ostream: "friend" не разрешается для объявлений данных
error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
error C2238: непредвиденные лексемы перед ";"
error C2872: ostream: неоднозначный символ
note: может быть "int ostream"
note: или "std::ostream"
error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
error C2086: int ostream: переопределение
note: см. объявление "ostream"
error C2065: os: необъявленный идентификатор
error C2059: синтаксическая ошибка: const
error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>Сборка проекта "delete it.vcxproj" завершена с ошибкой.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
18.02.2018, 22:03 5
Цитата Сообщение от Uncleewe Посмотреть сообщение
error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
error C2433: ostream: "friend" не разрешается для объявлений данных
error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
Для каких строк кода это выдаётся?

Добавлено через 34 секунды
Полный вывод компилятора (а не список ошибок) выложи.
1
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
18.02.2018, 22:08 6
Цитата Сообщение от Uncleewe Посмотреть сообщение
Да, пишет
#include <iostream> в Date.h.
И, да, using namespace std; в заголовочном файле не есть гуд.
1
1 / 1 / 0
Регистрация: 20.09.2017
Сообщений: 27
18.02.2018, 22:19  [ТС] 7
Подключение "iostream" в Date.h помогло. Большое спасибо!

Цитата Сообщение от Croessmah Посмотреть сообщение
И, да, using namespace std; в заголовочном файле не есть гуд.
Удалил, дописал "std::", и еще вопрос: разве использовать пространство имен хоть когда-то хорошо?
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
18.02.2018, 22:24 8
Цитата Сообщение от Uncleewe Посмотреть сообщение
разве использовать пространство имен хоть когда-то хорошо?
В смысле?
0
1 / 1 / 0
Регистрация: 20.09.2017
Сообщений: 27
18.02.2018, 22:33  [ТС] 9
Некоторые говорят, что это влияет на скорость работы: "компилятор пытается подставить 'std::' к каждому слову". Хотя я думаю, что если и влияет, то только на скорость компиляции.
В заголовочном файле тогда использовать пространства имен просто плохой тон?
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
18.02.2018, 22:38 10
Цитата Сообщение от Uncleewe Посмотреть сообщение
Хотя я думаю, что если и влияет, то только на скорость компиляции.
Правильно думаете, на скорость работы это не влияет. Да и компиляция ускорится если делать ::std:: (ИМХО, по крайней мере IDE быстрее сображать начинает)
1
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
18.02.2018, 22:48 11
Цитата Сообщение от Uncleewe Посмотреть сообщение
В заголовочном файле тогда использовать пространства имен просто плохой тон?
Не только. Герб Саттер "Решение сложных задач на C++"
Миниатюры
Перегрузка << в многофайловом проекте  
2
1 / 1 / 0
Регистрация: 20.09.2017
Сообщений: 27
18.02.2018, 22:52  [ТС] 12
Спасибо за книгу
0
18.02.2018, 22:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2018, 22:52
Помогаю со студенческими работами здесь

Ошибка LNK2005 в многофайловом проекте
Появилась такая проблема ,выдает ошибку LNK2005 при компиляции программы,вроде сделано все...

Вызов функции в многофайловом проекте
Компилятор ругается на указатель на массив &quot;a&quot; , в файле main.cpp Вот файлы проекта: ...

Иерархия классов в многофайловом проекте
Всем привет. Есть проблема с созданием программы. Должна быть небольшая иерархия классов, и все...

Вывод в файл *.txt в многофайловом проекте
Нужно перенаправить cout в файл. Я выводил в информацию в файл просто с помощью добавления такого...

Как избавиться от глобальных переменных в многофайловом проекте на С++?
Некоторые глобальные переменные можно заменить на глобальные константы. Долго промучилась с...

Разделение класса со статической переменной в многофайловом проекте
На ровном месте происходят какие-то непонятные чудеса, как будто бы я шаблонный класс объявляю -...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru