С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/10: Рейтинг темы: голосов - 10, средняя оценка - 4.50
kravam
быдлокодер
1710 / 897 / 105
Регистрация: 04.06.2008
Сообщений: 5,561
1

Конструкторы ofstream и стандарт C++11 и компилятор gcc необходимо разобраться

26.09.2014, 13:16. Просмотров 1851. Ответов 46
Метки нет (Все метки)

Друзья! Условимся, что компилятор g++ поддерживает этот стандарт, ибо ошибок, говорящих об обратном не замечено вроде.

C++
1
2
3
4
5
6
7
8
//main.cpp
#include <fstream>
using namespace std;
int main()
{
   ofstream of("f.txt");
   ofstream of_(of);
}
команда g++.exe main.cpp и простыня ошибок
C:\mingw32\bin>g++.exe main.cpp
In file included from C:/mingw32/i686-w64-mingw32/include/c++/ios:42:0,
from C:/mingw32/i686-w64-mingw32/include/c++/istream:38,
from C:/mingw32/i686-w64-mingw32/include/c++/fstream:38,
from main.cpp:2:
C:/mingw32/i686-w64-mingw32/include/c++/bits/ios_base.h: In copy constructor 'std::basic_ios<char>::
basic_ios(const std::basic_ios<char>&)':
C:/mingw32/i686-w64-mingw32/include/c++/bits/ios_base.h:786:5: error: 'std::ios_base::ios_base(const
std::ios_base&)' is private
ios_base(const ios_base&);
^
In file included from C:/mingw32/i686-w64-mingw32/include/c++/ios:44:0,
from C:/mingw32/i686-w64-mingw32/include/c++/istream:38,
from C:/mingw32/i686-w64-mingw32/include/c++/fstream:38,
from main.cpp:2:
C:/mingw32/i686-w64-mingw32/include/c++/bits/basic_ios.h:66:11: error: within this context
class basic_ios : public ios_base
^
In file included from main.cpp:2:0:
C:/mingw32/i686-w64-mingw32/include/c++/fstream: In copy constructor 'std::basic_ofstream<char>::bas
ic_ofstream(const std::basic_ofstream<char>&)':
C:/mingw32/i686-w64-mingw32/include/c++/fstream:602:11: note: synthesized method 'std::basic_ios<cha
r>::basic_ios(const std::basic_ios<char>&)' first required here
class basic_ofstream : public basic_ostream<_CharT,_Traits>
^
In file included from C:/mingw32/i686-w64-mingw32/include/c++/ios:43:0,
from C:/mingw32/i686-w64-mingw32/include/c++/istream:38,
from C:/mingw32/i686-w64-mingw32/include/c++/fstream:38,
from main.cpp:2:
C:/mingw32/i686-w64-mingw32/include/c++/streambuf: In copy constructor 'std::basic_filebuf<char>::ba
sic_filebuf(const std::basic_filebuf<char>&)':
C:/mingw32/i686-w64-mingw32/include/c++/streambuf:802:7: error: 'std::basic_streambuf<_CharT, _Trait
s>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char; _Traits = std
::char_traits<char>]' is private
basic_streambuf(const basic_streambuf& __sb)
^
In file included from main.cpp:2:0:
C:/mingw32/i686-w64-mingw32/include/c++/fstream:72:11: error: within this context
class basic_filebuf : public basic_streambuf<_CharT, _Traits>
^
C:/mingw32/i686-w64-mingw32/include/c++/fstream: In copy constructor 'std::basic_ofstream<char>::bas
ic_ofstream(const std::basic_ofstream<char>&)':
C:/mingw32/i686-w64-mingw32/include/c++/fstream:602:11: note: synthesized method 'std::basic_filebuf
<char>::basic_filebuf(const std::basic_filebuf<char>&)' first required here
class basic_ofstream : public basic_ostream<_CharT,_Traits>
^
main.cpp: In function 'int main()':
main.cpp:8:19: note: synthesized method 'std::basic_ofstream<char>::basic_ofstream(const std::basic_
ofstream<char>&)' first required here
ofstream of_(of);
^

C:\mingw32\bin>
ЧЯДНТ? Здесь увидел синтаксис C++11. Спасибо, кто откликнется.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2014, 13:16
Ответы с готовыми решениями:

Почему компилятор не распознает тип ofstream?
Почему не определяет ofstream хотя библиотека #include &quot;fstream&quot; есть ...

Компилятор gcc 4.8.1 не поддереживает C++11
Вот скрин с примером

NetBeans IDE и компилятор MinWG(gcc)
Здравствуйте, я только начал писать на C++ в NetBeans IDE и использую...

Собрать компилятор gcc с gtk+ под Windows 8.1
Всем доброго в.с. Необходимо поднять существующий проект написанный на C++. ...

Code Blocks компилятор GCC: где найти учебник
Скажите пожалуйста, где можно найти нормальный учебник для этого компилятора, а...

46
aLarman
646 / 567 / 164
Регистрация: 13.12.2012
Сообщений: 2,123
Завершенные тесты: 2
26.09.2014, 13:19 2
copy constructor (deleted)
Deleted (no copy constructor).
удален же копирующий
0
0x10
2580 / 1759 / 289
Регистрация: 24.11.2012
Сообщений: 4,391
26.09.2014, 13:19 3
Там же delete
C++
1
ofstream (const ofstream&) = delete;
0
kravam
быдлокодер
1710 / 897 / 105
Регистрация: 04.06.2008
Сообщений: 5,561
26.09.2014, 13:20  [ТС] 4
Бр-р-р... А попонятней нельзя?

Добавлено через 30 секунд
Ну delete- delete, делать-то чего?
0
aLarman
646 / 567 / 164
Регистрация: 13.12.2012
Сообщений: 2,123
Завершенные тесты: 2
26.09.2014, 13:21 5
kravam, Копировать нельзя объект, что Вы попытались сделать в 7 строке
0
kravam
быдлокодер
1710 / 897 / 105
Регистрация: 04.06.2008
Сообщений: 5,561
26.09.2014, 13:24  [ТС] 6
А почему нельзя? Это же копирующий конструктор или нет? Я понимаю, что он чего-то там удаляет (непонятно чего), но и копирует ведь!

Добавлено через 48 секунд
Вообще бред полный:
copy constructor (deleted)
Deleted (no copy constructor).
Так он copy или нет?
0
0x10
2580 / 1759 / 289
Регистрация: 24.11.2012
Сообщений: 4,391
26.09.2014, 13:24 7
Цитата Сообщение от kravam Посмотреть сообщение
Я понимаю, что он чего-то там удаляет
Он сам явно удален из класса. Его нет -> вызывать нечего.
0
aLarman
646 / 567 / 164
Регистрация: 13.12.2012
Сообщений: 2,123
Завершенные тесты: 2
26.09.2014, 13:25 8
Цитата Сообщение от kravam Посмотреть сообщение
no copy constructor
это понятнее?)
0
kravam
быдлокодер
1710 / 897 / 105
Регистрация: 04.06.2008
Сообщений: 5,561
26.09.2014, 13:27  [ТС] 9
А по-моему вы просто угадали. В первой строчке написано: copy constructor (deleted);

Ладно, по-другому спрошу, как его использовать?
0
0x10
2580 / 1759 / 289
Регистрация: 24.11.2012
Сообщений: 4,391
26.09.2014, 13:28 10
Цитата Сообщение от kravam Посмотреть сообщение
Ладно, по-другому спрошу, как его использовать?
Конструктор копирования? Никак. Его нет.
1
aLarman
646 / 567 / 164
Регистрация: 13.12.2012
Сообщений: 2,123
Завершенные тесты: 2
26.09.2014, 13:30 11
если использовать 11ый стандарт языка, должен сработать перемещающий
0
kravam
быдлокодер
1710 / 897 / 105
Регистрация: 04.06.2008
Сообщений: 5,561
26.09.2014, 13:30  [ТС] 12
То есть это надо понимать, что конструктор удалён?
copy constructor (deleted)
Deleted (no copy constructor).
0
aLarman
646 / 567 / 164
Регистрация: 13.12.2012
Сообщений: 2,123
Завершенные тесты: 2
26.09.2014, 13:31 13
kravam, таки да, удален
0
0x10
2580 / 1759 / 289
Регистрация: 24.11.2012
Сообщений: 4,391
26.09.2014, 13:32 14
Цитата Сообщение от kravam Посмотреть сообщение
То есть это надо понимать, что конструктор удалён?
Собственно, уже несколько постов подряд повторяем это разными словами.
0
kravam
быдлокодер
1710 / 897 / 105
Регистрация: 04.06.2008
Сообщений: 5,561
26.09.2014, 13:34  [ТС] 15
Так я-то думал, что удалён ОБЪЕКТ! А потом, я не могу взять в толк- откуда конструктор удалён, если в предыдущей версии его просто-напросто не было? Непонятно.
0
aLarman
646 / 567 / 164
Регистрация: 13.12.2012
Сообщений: 2,123
Завершенные тесты: 2
26.09.2014, 13:34 16
kravam, ключ компилятору передавали ? -std=c++11
0
kravam
быдлокодер
1710 / 897 / 105
Регистрация: 04.06.2008
Сообщений: 5,561
26.09.2014, 13:35  [ТС] 17
Вот пожалуйста, конструкторы с предыдущей версии (C++98), им тут и не пахнет
default (1)

ofstream();

initialization (2)

explicit ofstream (const char* filename, ios_base::openmode mode = ios_base::out);
0
0x10
2580 / 1759 / 289
Регистрация: 24.11.2012
Сообщений: 4,391
26.09.2014, 13:36 18
Цитата Сообщение от kravam Посмотреть сообщение
откуда конструктор удалён, если в предыдущей версии его просто-напросто не было?
Удален не по сравнению с предыдущей версией стандарта, а явно помечен как удаленный в текущем. Синтаксис:
C++
1
2
3
struct Test {
  Test(const Test&) = delete;
};
1
kravam
быдлокодер
1710 / 897 / 105
Регистрация: 04.06.2008
Сообщений: 5,561
26.09.2014, 13:39  [ТС] 19
Цитата Сообщение от aLarman Посмотреть сообщение
kravam, ключ компилятору передавали ? -std=c++11
передавал, тот же эффект. Компилятор 4.9.1, предполагаю, что он должен по умолчанию поддерживать этот стандарт.

Добавлено через 2 минуты
Цитата Сообщение от 0x10 Посмотреть сообщение
Удален не по сравнению с предыдущей версией стандарта, а явно помечен как удаленный в текущем. Синтаксис:
Реально не могу взять в толк. Разработчики включили нечто (конструктор) в новый стандарт. Потом переиграли, этот же конструктор удалили и известили нас об этом? Чё-то здесь не то...
0
aLarman
646 / 567 / 164
Регистрация: 13.12.2012
Сообщений: 2,123
Завершенные тесты: 2
26.09.2014, 13:40 20
Цитата Сообщение от kravam Посмотреть сообщение
Потом переиграли, этот же конструктор удалили и известили нас об этом?
просто появился синтексис позволяющий этот конструктор явно удалить, вот они и написали про него, никто его в этот класс не включал!
0
26.09.2014, 13:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2014, 13:40

Русский язык в консоли Windows 10. IDE: CodeLite. Компилятор: TDM-GCC-32
Здравствуйте. Windows 10. IDE: CodeLite. Компилятор: TDM-GCC-32 В файле...

Нужно разобраться в программе (конструкторы)
Задание Объявите класс TCar, создающий тип – автомобиль. Элементы – данные...

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


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

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

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