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

wcout, wfstream в Code Blocks - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.07.2012, 21:29     wcout, wfstream в Code Blocks #1
Не пойму, почему компилятор не определяет wcout, wfstream. #include <iostream>, #include <fstream>, using namespace std; сделаны. В std, подсказкой, он мне их показывет. Но после попытки компиляции пишет, или, что они не объявлены, или (если я так пишу: std::wcout), что в std нет таких.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2012, 21:29     wcout, wfstream в Code Blocks
Посмотрите здесь:

C++ Code::Blocks
C++ Code::blocks
MS VS in CODE BLOCKS C++
C++ code::blocks 10.05
C++ Проблемка с Code::Blocks
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 08:44  [ТС]     wcout, wfstream в Code Blocks #21
Или я не понял, о чем вы? Об этом: ifstream f(s[i]); ? Или об этом: wfstream fw(sw[i]);
Этот разве не подходит: explicit basic_ifstream(const char* s, ios_base::openmode mode = ios_base::in); ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xADMIRALx
 Аватар для xADMIRALx
66 / 60 / 1
Регистрация: 09.06.2012
Сообщений: 291
21.07.2012, 11:42     wcout, wfstream в Code Blocks #22
Цитата Сообщение от alsav22 Посмотреть сообщение
Написал, что подменил, а подменить не удаётся. Если вместо того mingv, что идёт в комплекте, помещаю скачанный по ссылке и прописываю в Toolchain executables путь к нему, то:
Нажмите нет,зайдите в *Code Blocks -> Settings -> Compiler and debugger settings -> Toolchain executables затем жмите на 3 точки [button...] И указываете на скачанный mingw

затем идем в Additional Patch указываем папку bin в mingw то есть mingw -> bin
в Search directorions -> Resource compiler ставим папку include то есть mingw -> include
затем Linker -> Search derictorions указываем папку lib это у нас mingw -> lib

Должно помочь
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.07.2012, 16:29     wcout, wfstream в Code Blocks #23
Или об этом: wfstream fw(sw[i]);
Этот разве не подходит: explicit basic_ifstream(const char* s, ios_base::openmode mode = ios_base::in);
Нет. const wchar_t* и const char* разные типы
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 16:59  [ТС]     wcout, wfstream в Code Blocks #24
Цитата Сообщение от soon Посмотреть сообщение
Нет. const wchar_t* и const char* разные типы
Это тогда как понимать? В MSVC:
C++
1
2
typedef basic_ifstream<char, char_traits<char> > ifstream;
typedef basic_fstream<wchar_t, char_traits<wchar_t> > wfstream;
В Code Blocks:
C++
1
2
typedef basic_ifstream<char> ifstream;
typedef basic_ifstream<wchar_t>  wifstream;
И, вообще, класс шаблонный?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.07.2012, 17:05     wcout, wfstream в Code Blocks #25
alsav22, и в чем разница?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 17:21  [ТС]     wcout, wfstream в Code Blocks #26
Цитата Сообщение от soon Посмотреть сообщение
alsav22, и в чем разница?
Раз так пишут: typedef basic_ifstream<wchar_t> wifstream; (и пишет не MSVC), значит есть конструктор. Или я не прав? Если есть шаблонный класс, то что мешает вместо char поставить wchar_t ?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.07.2012, 17:30     wcout, wfstream в Code Blocks #27
Цитата Сообщение от alsav22 Посмотреть сообщение
Раз так пишут: typedef basic_ifstream<wchar_t> wifstream; (и пишет не MSVC), значит есть конструктор. Или я не прав?
Еще раз. Станадртом определено всего 5 конструторов. И среди них нет конструтора, принимающего wchar_t или wstring.
modwind
 Аватар для modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
21.07.2012, 17:51     wcout, wfstream в Code Blocks #28
что мешает вместо char поставить wchar_t
Visual Studio позволяет указывать имя файла в виде wchar_t*, но по стандарту должно поддерживаться только char*, даже если сам поток юникодовый. Имена файлов в "широких" символах UTF-16 непереносимы на другие платформы.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 18:05  [ТС]     wcout, wfstream в Code Blocks #29
Хорошо, давайте отвлечёмся. Почему Code Blocks выдаёт вот такое и как это понимать:
D:\Code B\q\main.cpp||In function 'int main()':|
D:\Code B\q\main.cpp|33|error: no matching function for call to 'std::basic_fstream<wchar_t, std::char_traits<wchar_t> >::basic_fstream(wchar_t*&)'|
d:\program files (x86)\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\fstream|795|note: candidates are: std::basic_fstream<_CharT, _Traits>::basic_fstream(const char*, std::_Ios_Openmode) [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>]|
d:\program files (x86)\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\fstream|782|note: std::basic_fstream<_CharT, _Traits>::basic_fstream() [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>]|
d:\program files (x86)\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|87|note: std::basic_fstream<wchar_t, std::char_traits<wchar_t> >::basic_fstream(const std::basic_fstream<wchar_t, std::char_traits<wchar_t> >&)|
||=== Build finished: 1 errors, 8 warnings ===|
Добавлено через 2 минуты
xADMIRALx, сейчас буду пробовать.
modwind
 Аватар для modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
21.07.2012, 18:06     wcout, wfstream в Code Blocks #30
Потому, что не откроет он wchar_t файл, хоть ты тресни )
C++
1
wfstream fw(s[i]);
Так будет работать.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 18:26  [ТС]     wcout, wfstream в Code Blocks #31
Цитата Сообщение от modwind Посмотреть сообщение
Потому, что не откроет он wchar_t файл, хоть ты тресни )
Вообще уже ничего не понимаю! Почему же он тогда это показывет?!
typedef basic_ifstream<wchar_t> wifstream;
modwind
 Аватар для modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
21.07.2012, 18:37     wcout, wfstream в Code Blocks #32
GCC изначально линуксовый компилятор. А там файловая система другая и имена файлов в кодировке UTF-8. Да, wifstream считывает символы wchar_t, но имён файлов это не касается. Они будут типа char*.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 18:54  [ТС]     wcout, wfstream в Code Blocks #33
Цитата Сообщение от xADMIRALx Посмотреть сообщение
Нажмите нет,зайдите в *Code Blocks -> Settings -> Compiler and debugger settings -> Toolchain executables затем жмите на 3 точки [button...] И указываете на скачанный mingw

затем идем в Additional Patch указываем папку bin в mingw то есть mingw -> bin
в Search directorions -> Resource compiler ставим папку include то есть mingw -> include
затем Linker -> Search derictorions указываем папку lib это у нас mingw -> lib

Должно помочь
После этих действий, ещё что-нибудь жать нужно? Если ничего не жать, то, при попытке компиляции, пишет:
"q - Debug" uses an invalid compiler. Probably the toolchain path within the compiler options is not setup correctly?! Skipping...
Nothing to be done.
Если жать Auto-detect или Reset defaults, то подключает прежний.

Добавлено через 16 минут
Цитата Сообщение от modwind Посмотреть сообщение
GCC изначально линуксовый компилятор. А там файловая система другая и имена файлов в кодировке UTF-8. Да, wifstream считывает символы wchar_t, но имён файлов это не касается. Они будут типа char*.
Вот так переписал
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
#include <iostream>
#include <fstream>
#include <Windows.h>
 
using namespace std;
 
int main()
{
    //setlocale(0, "");
    //SetConsoleCP (1251);
    //SetConsoleOutputCP (1251);
 
    char *s[4] = {"upload.txt", "uploadANSI.txt", "uploadUNICOD.txt", "uploadUNICOD BIg.txt"};
    //wchar_t *sw[4] = {L"upload.txt", L"uploadANSI.txt", L"uploadUNICOD.txt", L"uploadUNICOD BIg.txt"};
    char buff[500];
    //wchar_t wbuff[500];
 
 
    for (int i = 0; i < 4; i++)
    {
        ifstream f(s[i]);
        if (!f.is_open()) cout << "Error!" << endl;
        f.getline(buff, 500);
        cout << s[i] << endl;
        cout << buff << endl;
        f.close();
    }
 
    for (int i = 0; i < 4; i++)
    {
        wfstream fw(s[i]);
        //if(!(fw.is_open()))cout << "Error!" << endl;
        //fw.getline(wbuff, 500);
        //wcout << sw[i] << L'\n';
        //wcout << wbuff << L'\n';
        fw.close();
    }
 
    system("pause");
    return 0;
}
Вот такое выдаёт :
||=== q, Debug ===|
||warning: auto-importing has been activated without --enable-auto-import specified on the command line.|
obj\Debug\main.o||In function `main':|
D:\Code B\q\main.cpp|8|undefined reference to `__gxx_personality_sj0'|
||Info: resolving std::cout by linking to __imp___ZSt4cout |
||=== Build finished: 1 errors, 1 warnings ===|
4iFF
 Аватар для 4iFF
19 / 19 / 1
Регистрация: 06.07.2012
Сообщений: 88
21.07.2012, 20:09     wcout, wfstream в Code Blocks #34
Лучше VC 2010 и без проблем.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 21:52  [ТС]     wcout, wfstream в Code Blocks #35
Цитата Сообщение от 4iFF Посмотреть сообщение
Лучше VC 2010 и без проблем.

Не по теме:

Как я согласен!

alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 22:08  [ТС]     wcout, wfstream в Code Blocks #36
Подскажите, знающие люди, если скачать компилятор по этой ссылке: http://code.google.com/p/mingw-builds/downloads/list его нужно устанавливать как-то, или достаточно указать пути. Папка с файлами компилятора mingv, скачанного по ссылке, так выглядит, а папка того, что идёт в комплекте с Code Blocks, так. Есть подозрение, что Code Blocks, в папке скачаного, чего-то не находит.
Миниатюры
wcout, wfstream в Code Blocks   wcout, wfstream в Code Blocks  
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.07.2012, 22:12     wcout, wfstream в Code Blocks #37
Цитата Сообщение от alsav22 Посмотреть сообщение
Как я согласен!
Однако, заметьте - все это безобразие началось из-за того, что MSVC не поддерживает стандарт, в результате чего вы написали платформозависимый(скорее, даже непереносимый) код. Что хорошо, возможно, только в продакшене.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2012, 00:24     wcout, wfstream в Code Blocks
Еще ссылки по теме:

C++ Code Blocks ошибка
Sfml на code::blocks C++
C++ Code::Blocks

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.07.2012, 00:24  [ТС]     wcout, wfstream в Code Blocks #38
Цитата Сообщение от soon Посмотреть сообщение
Однако, заметьте - все это безобразие началось из-за того, что MSVC не поддерживает стандарт, в результате чего вы написали платформозависимый(скорее, даже непереносимый) код. Что хорошо, возможно, только в продакшене.

Не по теме:

И тут, я так согласен!



Добавлено через 2 часа 8 минут
Цитата Сообщение от modwind Посмотреть сообщение
Потому, что не откроет он wchar_t файл, хоть ты тресни )
C++
1
wfstream fw(s[i]);
Так будет работать.
Так действительно работает. Значит дело было в имени файлов. Благодарю всех! xADMIRALx, скачанный компилятор мне всё-таки удалось подключить к Code Blocks, спасибо, что подсказали направление.
Yandex
Объявления
22.07.2012, 00:24     wcout, wfstream в Code Blocks
Ответ Создать тему
Опции темы

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