2014-01-12 14 views
3

Переходя к переполнению стека после исчерпания всех моих усилий.
Я запускаю Code Blocks 13.12 и MinGW 4.8.1 на 64-битной системе Windows 7 OS. Я потратил два дня, пытаясь заставить компилятор связать (статически) с библиотекой SFML 2.1. Я следил за обоими учебными руководствами SFML tutorial и this - переустановкой обоих блоков кода и MinGW два раза, прежде чем он окончательно соединится.
После этого я был освобожден, что SFML был признан, но у меня было 50 ошибок, когда я пытался создавать и запускать, что предлагаемые возможности C++ 11 не были.
Добавлено -std=gnu++11 в параметры компилятора и 13 из этих ошибок исчезли.
Остальные ошибки относятся к двум категориям: mutex не является членом std и с момента времени t не является членом chrono :: _ V2 :: clock clock. Я даже не уверен, что такое _V2.Некоторые функции C++ 11 отсутствуют при использовании блоков кода 13.12, MinGW 4.8.1 и SFML 2.1

Что мне не хватает?

-------------- Build: Release in PumpTracker2.0 (compiler: GNU GCC Compiler)--------------- 

mingw32-g++.exe -Wall -std=gnu++11 -DSFML_STATIC -O2 -std=gnu++11 -IC:\SFML-2.1\include -IC:\SFML-2.1\include -c C:\Users\WITcom\Desktop\C++\PumpTracker2.0\main.cpp -o obj\Release\main.o 

In file included from C:\Users\WITcom\Desktop\C++\PumpTracker2.0\main.cpp:25:0: 
C:\Users\WITcom\Desktop\C++\PumpTracker2.0\Account.h:37:1: error: 'mutex' in namespace 'std' does not name a type 
std::mutex mu; 
^ 
C:\Users\WITcom\Desktop\C++\PumpTracker2.0\Account.h:86:22: error: 'to_time_t' is not a member of 'std::chrono::_V2::steady_clock' 
    time_t currentTp = std::chrono::steady_clock::to_time_t(newly); 

C:\Users\WITcom\Desktop\C++\PumpTracker2.0\Account.h:94:48: error: 'from_time_t' is not a member of 'std::chrono::_V2::steady_clock' 
    std::chrono::steady_clock::time_point tNew = std::chrono::steady_clock::from_time_t(currentTp); 
               ^
C:\Users\WITcom\Desktop\C++\PumpTracker2.0\main.cpp:51:2: error: 'mutex' is not a member of 'std' 
    std::mutex mu3; 
^
C:\Users\WITcom\Desktop\C++\PumpTracker2.0\main.cpp:51:13: error: expected ';' before 'mu3' 
    std::mutex mu3; 
      ^
C:\Users\WITcom\Desktop\C++\PumpTracker2.0\main.cpp:52:19: error: 'mutex' was not declared in this scope 
    std::unique_lock<mutex> locker3(mu3, std::defer_lock); 
       ^
C:\Users\WITcom\Desktop\C++\PumpTracker2.0\main.cpp:52:24: error: template argument 1 is invalid 
    std::unique_lock<mutex> locker3(mu3, std::defer_lock); 
         ^
C:\Users\WITcom\Desktop\C++\PumpTracker2.0\main.cpp:52:33: error: invalid type in declaration before '(' token 
    std::unique_lock<mutex> locker3(mu3, std::defer_lock); 

C:\Users\WITcom\Desktop\C++\PumpTracker2.0\main.cpp:214:22: error: 'to_time_t' is not a member of 'std::chrono::_V2::steady_clock' 
     pS->tpNewest = std::chrono::steady_clock::to_time_t(NextPump); 
        ^
C:\Users\WITcom\Desktop\C++\PumpTracker2.0\main.cpp:245:51: error: 'from_time_t' is not a member of 'std::chrono::_V2::steady_clock' 
     std::chrono::steady_clock::time_point TT2 = std::chrono::steady_clock::from_time_t(pS->tpNewest); 
               ^
Process terminated with status 1 (0 minute(s), 4 second(s)) 
37 error(s), 47 warning(s) (0 minute(s), 4 second(s)) 
+0

Пожалуйста, разместите фактические сообщения об ошибках, которые вы видите, в полном объеме, и это может быть возможно, чтобы предложить причины. –

+0

Спасибо за ваш первоначальный ответ, Майк. Я опубликовал некоторые ошибки - самое подходящее для простого прочтения. –

+0

Предполагая, что вы строите с помощью '-std = C++ 11',' error: 'mutex' в пространстве имен 'std' не называет тип', возможно, из-за того, что заголовок не включен в файл (ы) с этой ошибкой. Я ничего не могу предложить о ошибках 'to_time_t' и' from_time_t'. –

ответ

0

Как уже упоминались исходное распределение MinGW не лучший вариант, чтобы пойти с, если вы хотите идти с самыми современными функциями. Вместо этого есть проекты, такие как Nuwen (сайт Стефана Т. Лаварея), а также MinGW Builds, которые предоставляют двоичные файлы MinGW-w64.

Упоминание SFML вводит в заблуждение, поскольку проблемы не имеют ничего общего с SFML. Имейте в виду, что вам придется перестроить SFML, если вы измените компилятор!

В качестве следующего шага было бы важно опубликовать минимальный пример исходного кода, который воспроизводит ошибки, потому что прямо сейчас мы можем только догадываться, что происходит не так, на основе ошибок.

Если вы не используете расширения GNU явно, вы должны использовать -std=c++11 вместо -std=gnu++11, и если вы посмотрите на команду сборки, вы заметите, что она включена дважды, что необязательно.

А теперь некоторые догадываясь об ошибках:

  • Account.h - Убедитесь, что заголовок <mutex> включен.
  • main.cpp - Убедитесь, что заголовок <mutex> включен.
  • main.cpp - Если std::unique_lock<mutex> со своего кода, то вам необходимо добавить std::, то есть std::unique_lock<std::mutex>.
  • main.cpp - time_t вещи, кажется, решена, но убедитесь, что в любом случае включать <chrono> и <ctime> (так как time_t определяется в <ctime>).
+0

Заметка о -std = C++ 11 vs -std = gnu ++ 11 хорошо взята. Я рассмотрел все элементы в вашем контрольном списке, прежде чем я повернулся к SO. Написал бит о SFML, потому что связывание его библиотеки с компилятором MinGW, в то время как функции C++ 11, похоже, являются общей проблемой, и я хотел указать другим в направлении решения, по крайней мере, части его. Я продолжаю читать, что Windows предлагает минимальную поддержку C++ 11, поэтому, возможно, мне нужно переключиться на Ubuntu? –

+0

Я никогда не слышал о каких-либо проблемах в связывании SFML и C++ 11 и считаю, что я знаю (3.8k сообщений на форуме SFML) ... Вы должны читать нечетные источники, C++ 11 doesn ' t имеет отношение к самой Windows, это все о компиляторе. Windows не заботится о том, записываете ли вы свой код в Assembly, C98, C++ 1y или Delphi, если вы можете скомпилировать его в исполняемый файл Windows. [MinGW-w64 4.8.1] (http://sourceforge.net/projects/mingwbuilds/files/host-windows/) или даже 4.9 содержит все возможности C++ 11, которые [GCC реализовал] (http: // gcc .gnu.org/проекты/cxx0x.html). – Lukas

Смежные вопросы