Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 31.01.2020
Сообщений: 148

Не получается правильно превратить один файл в три

03.04.2020, 08:37. Показов 1837. Ответов 4

Студворк — интернет-сервис помощи студентам
Есть такая программа:
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
#include <iostream>
 
class Point
{
    public:
        int x = 0;
        int y = 0;
 
        void print()
        {
            std::cout<<"("<<x<<";"<<y<<")"<<std::endl;
        }
 
        Point operator +(Point temp)
        {
            Point point;
            point.x = x + temp.x;
            point.y = y + temp.y;
            return point;
        }
 
        bool operator ==(Point temp)
        {
            if(x == temp.x && y == temp.y)
                return true;
            else
                return false;
        }
    private:
        bool permission = 0;
};
 
std::ostream &operator <<(std::ostream &output, Point point)
{
    output<<point.x<<" "<<point.y; 
    return output;
}
 
std::istream &operator >>(std::istream &input, Point &point)
{
    input>>point.x>>point.y;
    return input;
 
}
 
int main()
{
    Point A;
    std::cin>>A;
    std::cout<<A<<std::endl;
    return 0;
}
Я хочу её разделить на три файла: main.cpp, utils.cpp, utils.h
Делаю так

main.cpp:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include "utils.h"
 
int main()
{
    Point A;
    std::cin>>A;
    std::cout<<A<<std::endl;
    return 0;
}
utils.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
#include "utils.h"
void print()
{
    std::cout<<"("<<x<<";"<<y<<")"<<std::endl;
}
 
Point operator +(Point temp)
{
    Point point;
    point.x = x + temp.x;
    point.y = y + temp.y;
    return point;
}
 
bool operator ==(Point temp)
{
    if(x == temp.x && y == temp.y)
        return true;
    else
        return false;
}
 
std::ostream &operator <<(std::ostream &output, Point point)
{
    output<<point.x<<" "<<point.y; 
    return output;
}
 
std::istream &operator >>(std::istream &input, Point &point)
{
    input>>point.x>>point.y;
    return input;
 
}
utils.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef UTILS_H
#define UTILS_H
 
class Point
{
    public:
        int x = 0;
        int y = 0;
        void print();
        Point operator +(Point temp);
        bool operator ==(Point temp);
    private:
        bool permission = 0;
};
 
std::ostream &operator <<(std::ostream &output, Point point);
std::istream &operator >>(std::istream &input, Point &point);
#endif
Компилятор ругается, там конечно написано, что не так:
Bash
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
In file included from utils.cpp:1:0:
utils.h:16:6: error: ‘ostream’ in namespace ‘std’ does not name a type
 std::ostream &operator <<(std::ostream &output, Point point);
      ^~~~~~~
utils.h:17:6: error: ‘istream’ in namespace ‘std’ does not name a type
 std::istream &operator >>(std::istream &input, Point &point);
      ^~~~~~~
utils.cpp: In function ‘void print()’:
utils.cpp:4:7: error: ‘cout’ is not a member of ‘std’
  std::cout<<"("<<x<<";"<<y<<")"<<std::endl;
       ^~~~
utils.cpp:4:18: error: ‘x’ was not declared in this scope
  std::cout<<"("<<x<<";"<<y<<")"<<std::endl;
                  ^
utils.cpp:4:26: error: ‘y’ was not declared in this scope
  std::cout<<"("<<x<<";"<<y<<")"<<std::endl;
                          ^
utils.cpp:4:39: error: ‘endl’ is not a member of ‘std’
  std::cout<<"("<<x<<";"<<y<<")"<<std::endl;
                                       ^~~~
utils.cpp: In function ‘Point operator+(Point)’:
utils.cpp:10:12: error: ‘x’ was not declared in this scope
  point.x = x + temp.x;
            ^
utils.cpp:11:12: error: ‘y’ was not declared in this scope
  point.y = y + temp.y;
            ^
utils.cpp: At global scope:
utils.cpp:15:28: error: ‘bool operator==(Point)’ must take exactly two arguments
 bool operator ==(Point temp)
                            ^
utils.cpp:23:6: error: ‘ostream’ in namespace ‘std’ does not name a type
 std::ostream &operator <<(std::ostream &output, Point point)
      ^~~~~~~
utils.cpp:29:6: error: ‘istream’ in namespace ‘std’ does not name a type
 std::istream &operator >>(std::istream &input, Point &point)
Но я не могу этим воспользоваться. Помогите пожалуйста, как правильно это сделать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.04.2020, 08:37
Ответы с готовыми решениями:

Не получается прочесть правильно текстовый файл в структуру а затем в бинарный файл
Нужно просто прочесть файл в структуру данных а потом оттуда записать в бинарный файл Вот как выглядит текстовый файл: 11122 Mary...

Какова вероятность того, что студент ответит правильно: только на один вопрос; на три вопроса
Студент знает 32 из 40 вопросов курса. На экзамене ему случайным образом предлагается три вопроса. Какова вероятность того, что студент...

Как сохранить три RichTextBox в один RTF файл?
Всем привет!!! Такой вопрос: На форме есть три ричтекстбокса. Как их все сохранить в один RTF файл. Делаю стандартными методами,...

4
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
03.04.2020, 09:02
Лучший ответ Сообщение было отмечено lukinegor как решение

Решение

lukinegor, в начало utils.h добавь #include <iosfwd>, в начало utils.cpp добавь #include <ostream> и #include <istream>

Добавлено через 3 минуты
еще имя класса добавь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void Point::print()
{
    std::cout<<"("<<x<<";"<<y<<")"<<std::endl;
}
 
Point Point::operator +(Point temp)
{
    Point point;
    point.x = x + temp.x;
    point.y = y + temp.y;
    return point;
}
 
bool Point::operator ==(Point temp)
{
    if(x == temp.x && y == temp.y)
        return true;
    else
        return false;
}
0
1 / 1 / 0
Регистрация: 31.01.2020
Сообщений: 148
03.04.2020, 09:09  [ТС]
Это очень помогло, но осталось ещё две ошибки:
Bash
1
2
3
4
5
6
7
8
utils.cpp: In member function ‘void Point::print()’:
utils.cpp:6:7: error: ‘cout’ is not a member of ‘std’
  std::cout<<"("<<x<<";"<<y<<")"<<std::endl;
       ^~~~
utils.cpp:6:7: note: suggested alternative: ‘copy’
  std::cout<<"("<<x<<";"<<y<<")"<<std::endl;
       ^~~~
       copy
0
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,750
03.04.2020, 09:10
Лучший ответ Сообщение было отмечено lukinegor как решение

Решение

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
#ifndef UTILS_H
#define UTILS_H
#include <iostream>
 
class Point
{
    public:
        int x = 0;
        int y = 0;
        // Конструктор
        Point(){};
        Point(int _x , int _y )  : x(_x), y(_y)  {};
       // void print();
       const Point operator +(const Point&) const;
       // Point operator +(Point temp);
       bool operator == (const Point&) const;
    private:
 
        bool permission = 0;
};
 
std::ostream &operator <<(std::ostream &output, Point point);
std::istream &operator >>(std::istream &input, Point &point);
#endif
utils.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
#include "utils.h"
 
 
const Point Point::operator +(const Point& p) const {
    return Point(x + p.x, y + p.y);
}
 
//Операции отношения
bool Point::operator == (const Point &p) const{
  return (x == p.x) && (y == p.y);
}
 
std::ostream &operator <<(std::ostream &output, Point point)
{
    output<<point.x<<" "<<point.y;
    return output;
}
 
std::istream &operator >>(std::istream &input, Point &point)
{
    input>>point.x>>point.y;
    return input;
 
}
0
1 / 1 / 0
Регистрация: 31.01.2020
Сообщений: 148
03.04.2020, 09:31  [ТС]
Большое спасибо за доработку!

Добавлено через 9 минут
marat_miaki
Зачем объявлять пустой конструктор, если по дефолту такой же стоит?

Добавлено через 9 минут
Спасибо всем! Ту оставшуюся сам дорешал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.04.2020, 09:31
Помогаю со студенческими работами здесь

Даны три файла в 3х разных кодировках, перевести текст в Windows-1251 и записать в один файл
Даны три файла в 3х разных кодировках, перевести текст в Windows-1251 и записать в один файл. В сущности я понимаю как это сделать...

Превратить один абзац в несколько
Добрый день! Создал несколько строк, перенося их с помощью Shift+Enter. Теперь возникла необходимость создать маркированный список....

Один iso образ превратить в 2
Добрый день! Ситуация следующая, сделал самостоятельно образ windows XP, напихал туда дрова для ноута, программы которые нужны будут,...

Построить три класса, один базовый и три потомка
Построить три класса (базовый и 3 потомка), описывающих некоторых хищных животных (один из потомков), всеядных(второй потомок) и травоядных...

Ввести три множества через один файл и найти множества их объединения и пересечения
Нужно ввести три множества через один файл и найти множества их объединения и пересечения.(желательно с процедурой ввода множества) ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru