Avoir d'erreur 'char16_t et char32_t non déclaré'
Je suis en train d'élaborer un programme en C++ sous Linux. La version de gcc est 4.5.1 20100924. Je veux utiliser std::atomic_int dans mon programme. J'ai inclus atomique en-tête comme ci-dessous:
include <atomic>
Quand je compile le programme, j'obtiens ci-dessous les erreurs:
In file included from /usr/lib/gcc/x86_64-redhat-linux/4.5.1/../../../../include/c++/4.5.1/bits/atomic_base.h:87:0,
from /usr/lib/gcc/x86_64-redhat-linux/4.5.1/../../../../include/c++/4.5.1/atomic:41,
from ../Source/Main.h:33:
/usr/lib/gcc/x86_64-redhat-linux/4.5.1/../../../../include/c++/4.5.1/bits/atomicfwd_cxx.h:107:25: error: ‘char16_t’ was not declared in this scope
/usr/lib/gcc/x86_64-redhat-linux/4.5.1/../../../../include/c++/4.5.1/bits/atomicfwd_cxx.h:107:33: error: template argument 1 is invalid
/usr/lib/gcc/x86_64-redhat-linux/4.5.1/../../../../include/c++/4.5.1/bits/atomicfwd_cxx.h:107:53: error: invalid type in declaration before ‘;’ token
/usr/lib/gcc/x86_64-redhat-linux/4.5.1/../../../../include/c++/4.5.1/bits/atomicfwd_cxx.h:110:25: error: ‘char32_t’ was not declared in this scope
/usr/lib/gcc/x86_64-redhat-linux/4.5.1/../../../../include/c++/4.5.1/bits/atomicfwd_cxx.h:110:33: error: template argument 1 is invalid
/usr/lib/gcc/x86_64-redhat-linux/4.5.1/../../../../include/c++/4.5.1/bits/atomicfwd_cxx.h:110:53: error: invalid type in declaration before ‘;’ token
Si je comprend <cstdint>
, j'obtiens les mêmes erreurs. Les en-têtes de char.h et cuchar.h n'y sont pas sur mon système. Comment puis-je résoudre les erreurs de compilation?
Vous en remercie d'avance.
Êtes-vous en passant l'option
En passant -std=c++0x pour g++ résolu le problème. Merci beaucoup.
Je suggère également de mettre à niveau le compilateur; version actuelle de la GCC 4.7, et de 4,6 paru en mars 2011; puisque vous voulez C++2011 fonctionnalités, il est préférable de mettre à niveau.
-std=c++0x
?cuchar.h
n'est pas un en-tête, juste cuchar
. De toute façon, charXX_t
sont "intégrés" types, n'est pas nécessaire.En passant -std=c++0x pour g++ résolu le problème. Merci beaucoup.
Je suggère également de mettre à niveau le compilateur; version actuelle de la GCC 4.7, et de 4,6 paru en mars 2011; puisque vous voulez C++2011 fonctionnalités, il est préférable de mettre à niveau.
OriginalL'auteur geekowl | 2012-07-31
Vous devez vous connecter pour publier un commentaire.
ÉDITÉ:
Je me suis trompé à ce sujet. il suffit de passer
--std=c++0x
g++, et qui permettrait de le faire.Aussi loin que je le vois, la norme définit comme des mots clés, pas besoin d'un supplément incluent.
cuchar
ne permet pas de définir des types/aliases.En passant -std=c++0x pour g++ résolu le problème. Merci beaucoup.
Presque un coup de gueule: Cette réponse donne un poisson après l'avoir à donner d'abord à seulement quelques poisson pourri. L'autre réponse donne de poissons et quelques informations sur la façon de poisson. Cependant, l'autre n'a pas été acceptée.
N'êtes-vous pas censé supprimer votre réponse lorsque vous réalisez que vous avez été mal et que quelqu'un d'autre avait raison?
OriginalL'auteur starrify
Vous semblez ne pas avoir activé C++11 dans votre compilateur, ou si vous utilisez un compilateur qui a ces nouveaux types de non-déclaré.
Pour
char16_t
etchar32_t
, vous n'avez pas besoin supplémentaire inclure.g++ howto:
Type
g++ --version
. Si elle est au moins 4.4, puis il a un support pour nouveau littéraux de chaîne. Si non: Vous avez besoin d'une nouvelle version de compilateur.Ensuite, assurez-vous de passer
--std=c++0x
ou--std=c++11
pour le compilateur.OriginalL'auteur Sebastian Mach