|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.08.2012, 17:12 | #1 |
Пользователь
Регистрация: 24.09.2010
Сообщений: 22
|
Ошибка при компиляции (...is not a member of std).
При компиляции возникают следующие ошибки:
wcerr/wostringstream is not a member of std В чем причина и как это исправить? Сбит с толку. #include <windows.h> #include <iostream> #include <sstream> #include <process.h> #include <fstream> namespace TST { class Exception { public: Exception(const wchar_t* szwText) : m_wstrText(szwText) {;}; std::wstring What() const throw() { return m_wstrText; }; protected: const std::wstring m_wstrText; }; void le_chk(BOOL bResult, const char* file, int line) { if(!bResult) { std::clog << "An error " << GetLastError() << "occured"; std::wostringstream os; os << L"Win32 error occured: GetLastError returned " << GetLastError() << " in " << file << L"@" << line; throw Exception(os.str().c_str()); }; }; #define TST_LE_CHECK(res) le_chk((res), __FILE__, __LINE__) class CallBase { public: virtual void Call() = 0; }; class AsyncActionBase { public: AsyncActionBase(CallBase* pCall) : m_hThread(NULL) { unsigned uId = 0; m_hThread = (HANDLE)_beginthreadex(NULL, 0, &AsyncActionBase::thread_proc, (void*)pCall, 0, &uId); TST_LE_CHECK(!!m_hThread); }; virtual ~AsyncActionBase() { if(m_hThread) { TST_LE_CHECK(WaitForSingleObject(m_ hThread, INFINITE)!= WAIT_FAILED); TST_LE_CHECK(CloseHandle(m_hThread) ); m_hThread = NULL; }; }; protected: static unsigned __stdcall thread_proc(void * p) { try { ((CallBase*)p)->Call(); } catch (const TST::Exception& excpt) { std::wcerr << excpt.What(); }; return 0; }; HANDLE m_hThread; }; class MyAsyncAction1 : public CallBase , public AsyncActionBase { public: MyAsyncAction1() : AsyncActionBase(this) { ; }; virtual ~MyAsyncAction1() { ; }; //CallBase virtual void Call() { for(size_t i = 0; i < 100; ++i) { std::cout << "Test #" << (i+1) << std::endl; Sleep(10); }; }; }; }; int main() { try { TST::MyAsyncAction1 oBj; } catch (const TST::Exception& excpt) { std::wcerr << excpt.What(); }; }; |
17.08.2012, 01:32 | #2 |
Форумчанин
Регистрация: 22.12.2011
Сообщений: 378
|
1. Ошибка
TST_LE_CHECK(WaitForSingleObject(m_ hThread, INFINITE)!= WAIT_FAILED); TST_LE_CHECK(CloseHandle(m_hThread) ); m_hThread = NULL; Заменить на TST_LE_CHECK(WaitForSingleObject(m_hThread, INFINITE)!= WAIT_FAILED); TST_LE_CHECK(CloseHandle(m_hThread) ); m_hThread = NULL; 2. У меня все работает когда я исправил твою опечатку. 3. Ну и ошибка говорит сама за себя если перевести wcerr/wostringstream не член std 4. Зачем ставить ; после каждой закрывающейся скобки? Она обязательная только в классах структурах. Но точно не в условии if И желательно форматировать код перед отправкой. Так понятнее намного будет
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
|
17.08.2012, 02:23 | #3 | |
Пользователь
Регистрация: 24.09.2010
Сообщений: 22
|
Цитата:
Но все-таки неясно по поводу ошибки про членство std. При компилировании в Dev-C++ вылезает эта ошибка и, собственно, затрудняюсь с ее исправлением. При компиляции в Visual Studio ошибки такой нет. |
|
17.08.2012, 08:23 | #4 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Посмотрите в тамошнем хелпе, какой хидер нужно подключать для wostringstream-а.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
17.08.2012, 10:05 | #5 |
Пользователь
Регистрация: 24.09.2010
Сообщений: 22
|
|
17.08.2012, 10:32 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
ваш компиль точно знает о широких версиях потоков?
я бы поставил норм компиль.. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
17.08.2012, 10:39 | #7 |
Пользователь
Регистрация: 24.09.2010
Сообщений: 22
|
|
17.08.2012, 10:45 | #8 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Dev C++ это не компилятор.
компиль там MinGW c gcc версии 3,4,3 это же ппц, уже 4,7 есть... мое, ИМХО, лучше скачать последний MinGW, и к нему Code::Blocks как редактор(последний брать без компиля) или же на студии сидеть. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
17.08.2012, 10:48 | #9 |
Пользователь
Регистрация: 24.09.2010
Сообщений: 22
|
Спасибо большое за отзыв и подсказку) На Dev-C++ года три назад компилил простенькие сишные программы (вывести массив, заполнить матрицу, перемножить что-то), спасала Ubunta, но ноут с убунтой в ремонте. Спасибо.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ошибка при компиляции | chircov090993 | Общие вопросы Delphi | 5 | 15.04.2012 21:39 |
Ошибка при компиляции. | Rin | Общие вопросы C/C++ | 14 | 07.10.2011 20:34 |
ошибка при компиляции | xreal | C# (си шарп) | 2 | 05.05.2011 01:43 |
Ошибка при компиляции | FoxXx | Общие вопросы C/C++ | 11 | 14.06.2010 19:57 |
Ошибка при компиляции | [QY]'~''LeK1[ee] | Помощь студентам | 2 | 28.05.2008 20:46 |