2013-11-22 7 views
5

Ich versuche kompilieren Code, der snprintf in Version 4.8.2 von g ++ mit -std = C++ 11 ohne Erfolg verwendet. Warum erkennt g ++ snprintf nicht? Kann ich das überwinden, während ich noch snprintf und C++ 11 benutze?Wie benutze ich snprintf() in g ++ -std = C++ 11 Version 4.8.2

bekam ich folgendes:

make all Building file: ../src/cppHWtest.cpp Invoking: Cygwin C++ 
Compiler g++ -std=c++11 -D"hash_map=unordered_map" -O0 -g3 -Wall -c 
-fmessage-length=0 -MMD -MP -MF"src/cppHWtest.d" -MT"src/cppHWtest.d" -o "src/cppHWtest.o" "../src/cppHWtest.cpp" cygwin warning: MS-DOS style path detected: C:\Users\poudyal\workspace\cppHWtest\Debug 
Preferred POSIX equivalent is: 
/cygdrive/c/Users/poudyal/workspace/cppHWtest/Debug CYGWIN 
environment variable option "nodosfilewarning" turns off this warning. 
Consult the user's guide for more details about POSIX paths: 
    http://cygwin.com/cygwin-ug-net/using.html#using-pathnames ../src/cppHWtest.cpp: In function 'int main()': 
../src/cppHWtest.cpp:20:35: error: 'snprintf' was not declared in this 
scope snprintf(buff, 10, "%s", "Hell O"); 
           ^make: *** [src/cppHWtest.o] Error 1 src/subdir.mk:18: recipe for target 'src/cppHWtest.o' failed 

**** Build Finished **** 
+3

[Dieser Cygwin-Mailinglisten-Archiv-Thread] (http://cygwin.com/ml/cygwin/2012-04/msg00140.html) handelt von einem angeblich behobenen Fehler, der dazu führte, dass 'snprintf' nicht für' deklariert wurde -std = C++ 0x'. Vorgeschlagene Problemumgehung war, stattdessen "-std = gnu ++ 0x" zu verwenden. Probieren Sie einfach "-std = gnu ++ 11" und sehen Sie, was passiert. – Casey

+0

Das hat funktioniert! Ich hatte auch # enthalten vjktm

+0

Ich finde jetzt, dass Vektor das gleiche Problem hat. vector <> ist in Ordnung mit -std = C++ 11 – vjktm

Antwort

6

Wahrscheinlich weniger aufdringliche Lösung als den Modus zu -std=gnu++11 Schalt ist -U__STRICT_ANSI__. Dies aktiviert #if !defined(__STRICT_ANSI__) || (__STDC_VERSION__ >= 199901L) bei stdio.h: 234 (GCC 4.8.3).

+2

Dies funktioniert mit "-std = C++ 11" auf Cygwin. –

+0

beim Aufbau sowohl auf ubuntu/linux als auch auf Windows mit Cygwin, dann wird diese Lösung die beste Lösung sein - es hat für mich funktioniert - danke – serup

Verwandte Themen