2013-11-22 27 views
5

g ++ 'nın 4.8.2 sürümünde snprintf' i başarıyla kullanmadan -std = C++ 11 kullanan derleme kodunu çalıştırıyorum. Neden g ++ snprintf'yi tanımıyor? Bunu hala snprintf ve C++ 11 kullanıyorken üstesinden gelebilir miyim? -std=gnu++11 moduna geçiş dahag ++ -std = C++ 11 sürümünde snprintf() nasıl kullanılır? 4.8.2

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

[Bu cygwin posta listesi arşiv iş parçacığı] (http://cygwin.com/ml/cygwin/2012-04/msg00140.html), 'snprintf' için bildirilmemesine neden olan, varsayılan olarak düzeltilen bir hata hakkındadır. -std = C++ 0x'. Önerilen geçici çözüm, bunun yerine -std = gnu ++ 0x' kullanmaktı. Sadece bunun için, '-std = gnu ++ 11' deneyin ve ne olduğunu görün. – Casey

+0

Bu işe yaradı! Ben de vjktm

+0

#include vardı Ben şimdi vektör aynı sorunu olduğunu buldum. vektör <>, -std = C++ 11 – vjktm

cevap

6

Muhtemelen daha az müdahaleci bir çözüm -U__STRICT_ANSI__ geçerli:

aşağıdaki aldık. Bu, stdio.h: 234'te (GCC 4.8.3) #if !defined(__STRICT_ANSI__) || (__STDC_VERSION__ >= 199901L)'u sağlayacaktır.

+2

Bu, Cygwin'de '-std = C++ 11' ile çalışır. Hem ubuntu/linux hem de cygwin ile pencereler üzerinde –

+0

, bu çözüm en iyi çözüm olacak - benim için çalıştı - teşekkürler – serup

İlgili konular