Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
1

wcout, wfstream в Code Blocks

20.07.2012, 21:29. Просмотров 3566. Ответов 37
Метки нет (Все метки)

Не пойму, почему компилятор не определяет wcout, wfstream. #include <iostream>, #include <fstream>, using namespace std; сделаны. В std, подсказкой, он мне их показывет. Но после попытки компиляции пишет, или, что они не объявлены, или (если я так пишу: std::wcout), что в std нет таких.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.07.2012, 21:29
Ответы с готовыми решениями:

Code::blocks и VS
всем привет, у меня такой вопрос: какой в Code::blocks аналог для #include stdafx.h? Нужно...

Code::Blocks
В Code::Blocks когда ты откомпилил программу в Debug, после внес изменения и снова &quot;откомпилил&quot;, то...

Code::blocks
Помогите как включить #include &lt;graphics.h&gt; #include &lt;windows.h&gt; в Code::block - се ,

code::blocks 10.05
Я установил себе C++ code::blocks. И когда я компилирую любую программу и потом запускаю .exe...

37
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 08:44  [ТС] 21
Или я не понял, о чем вы? Об этом: ifstream f(s[i]); ? Или об этом: wfstream fw(sw[i]);
Этот разве не подходит: explicit basic_ifstream(const char* s, ios_base::openmode mode = ios_base::in); ?
0
69 / 63 / 5
Регистрация: 09.06.2012
Сообщений: 291
21.07.2012, 11:42 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

Должно помочь
1
2551 / 1316 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.07.2012, 16:29 23
Или об этом: wfstream fw(sw[i]);
Этот разве не подходит: explicit basic_ifstream(const char* s, ios_base::openmode mode = ios_base::in);
Нет. const wchar_t* и const char* разные типы
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 16:59  [ТС] 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;
И, вообще, класс шаблонный?
0
2551 / 1316 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.07.2012, 17:05 25
alsav22, и в чем разница?
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 17:21  [ТС] 26
Цитата Сообщение от soon Посмотреть сообщение
alsav22, и в чем разница?
Раз так пишут: typedef basic_ifstream<wchar_t> wifstream; (и пишет не MSVC), значит есть конструктор. Или я не прав? Если есть шаблонный класс, то что мешает вместо char поставить wchar_t ?
0
2551 / 1316 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.07.2012, 17:30 27
Цитата Сообщение от alsav22 Посмотреть сообщение
Раз так пишут: typedef basic_ifstream<wchar_t> wifstream; (и пишет не MSVC), значит есть конструктор. Или я не прав?
Еще раз. Станадртом определено всего 5 конструторов. И среди них нет конструтора, принимающего wchar_t или wstring.
0
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
21.07.2012, 17:51 28
что мешает вместо char поставить wchar_t
Visual Studio позволяет указывать имя файла в виде wchar_t*, но по стандарту должно поддерживаться только char*, даже если сам поток юникодовый. Имена файлов в "широких" символах UTF-16 непереносимы на другие платформы.
1
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 18:05  [ТС] 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, сейчас буду пробовать.
0
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
21.07.2012, 18:06 30
Потому, что не откроет он wchar_t файл, хоть ты тресни )
C++
1
wfstream fw(s[i]);
Так будет работать.
1
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 18:26  [ТС] 31
Цитата Сообщение от modwind Посмотреть сообщение
Потому, что не откроет он wchar_t файл, хоть ты тресни )
Вообще уже ничего не понимаю! Почему же он тогда это показывет?!
typedef basic_ifstream<wchar_t> wifstream;
0
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
21.07.2012, 18:37 32
GCC изначально линуксовый компилятор. А там файловая система другая и имена файлов в кодировке UTF-8. Да, wifstream считывает символы wchar_t, но имён файлов это не касается. Они будут типа char*.
1
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 18:54  [ТС] 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 ===|
0
20 / 20 / 1
Регистрация: 06.07.2012
Сообщений: 88
21.07.2012, 20:09 34
Лучше VC 2010 и без проблем.
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 21:52  [ТС] 35
Цитата Сообщение от 4iFF Посмотреть сообщение
Лучше VC 2010 и без проблем.

Не по теме:

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

0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 22:08  [ТС] 36
Подскажите, знающие люди, если скачать компилятор по этой ссылке: http://code.google.com/p/mingw... loads/list его нужно устанавливать как-то, или достаточно указать пути. Папка с файлами компилятора mingv, скачанного по ссылке, так выглядит, а папка того, что идёт в комплекте с Code Blocks, так. Есть подозрение, что Code Blocks, в папке скачаного, чего-то не находит.
0
Миниатюры
wcout, wfstream в Code Blocks   wcout, wfstream в Code Blocks  
2551 / 1316 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.07.2012, 22:12 37
Цитата Сообщение от alsav22 Посмотреть сообщение
Как я согласен!
Однако, заметьте - все это безобразие началось из-за того, что MSVC не поддерживает стандарт, в результате чего вы написали платформозависимый(скорее, даже непереносимый) код. Что хорошо, возможно, только в продакшене.
1
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.07.2012, 00:24  [ТС] 38
Цитата Сообщение от soon Посмотреть сообщение
Однако, заметьте - все это безобразие началось из-за того, что MSVC не поддерживает стандарт, в результате чего вы написали платформозависимый(скорее, даже непереносимый) код. Что хорошо, возможно, только в продакшене.

Не по теме:

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



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

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Code::Blocks
Здравствуйте. Я в английском не силён, и разобраться самостоятельно с этой IDE не могу. У меня есть...

MS VS in CODE BLOCKS
Делал проекты в VISUAL C++ EXPRESS. Сеичас пересел на LINUX, пользуюсь CODE BLOCKS . Есть...

Компиляция в Code Blocks
Скачала Code Blocks с компилятором. Написала #include &lt;iostream&gt; int main() { ...

Установка Code Blocks
Не могли бы вы помочь верно поставить программку кодблокс со всеми библиотеками\компиляторами,...


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

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

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