À l'aide d'un typedef avais uint causes d'erreur, tout en “unsigned int” n'est pas...?
Pour une raison quelconque, quand je définis une variable comme "uint" au lieu de "unsigned int" dans mon programme, il erreurs. Cela semble étrange, parce que uint est typedef avais comme:
typedef unsigned int uint;
...donc je pense que je pourrais utiliser les deux de façon interchangeable. Pour être plus exact, je suis en assignant le résultat d'une fonction qui renvoie "unsigned int" dans une variable uint, puis
l'aide que uint dans un vecteur redimensionner appel... à quel point c'erreurs. C'est à dire, mon code ressemble à ceci:
unsigned int getUInt()
{
return 3;
}
int main(void) {
vector<vector<float> > vectVect(100000);
for(uint i = 0; i < vectVect.size(); ++i)
{
vector<float>& myVect = vectVect[i];
uint myUnsignedInt = getUInt();
myVect.resize(myUnsignedInt);
}
cout << "finished" << endl;
}
...et la ligne, c'erreurs est le myVect.redimensionner ligne.
Évidemment, j'ai déjà une solution, mais je voudrais comprendre POURQUOI ce qui se passe, comme je suis assez perplexe. Quelqu'un a des idées?
PS - Dans le cas où quelqu'un pense qu'il peut avoir une importance, je suis en utilisant gcc v4.1.2 sur fedora 15... et le fichier include qui définit uint est /usr/include/sys/types.h.
Vous devez montrer le vrai code qui est en cause. En particulier, la
#include
-s, le using
déclarations, etc. Et GCC 4.6 est probablement beaucoup plus standard conforme de 4,1 était.Et comme vous pouvez le voir ici, l'erreur ne se produit pas dans l'exemple que vous avez fournies (au moins avec cette version de gcc).
Et pour le fun, gcc 4.3.4 ne pas produire l'erreur.
L'erreur était une erreur de segmentation lors de l'exécution - et après le creusement plus loin, je pense que la définition de type est sans rapport. Ça doit être une sorte de problème avec la mémoire non écrit dessus, et changer cette typedefjust est arrivé de changer le code du hasard façon dont il a travaillé. Merci pour les commentaires, si!
OriginalL'auteur Paul Molodowitch | 2011-11-17
Vous devez vous connecter pour publier un commentaire.
Ma conjecture est qu'il y a un autre uint dans le système. Essayez de renommer le vôtre à quelque chose d'inhabituel ou encore mieux, de l'envelopper dans un espace de noms.
OriginalL'auteur Ant
Ma conjecture est qu'il essaye de former une "hiérarchie" de quelque sorte.
En d'autres termes, nous avons:
Si
size_t
est "plus spécifique" qu'un génériqueunsigned int
, alors il est logique pour l'empêcher d'être converti àuint
, peut-être "plus spécifiques" que n'importe quel vieuxunsigned int
.Je m'attends à ce que cela soit un avertissement, si quelque chose, cependant, pas une erreur...
typedef
crée un alias pour un type, pas un nouveau type. Donc, étant donné les déclarations ci-dessus,unsigned int
,size_t
, etuint
sont tous du même type (comme le sont lesunsigned
etint unsigned
).C'est ce que doit arriver, je suis d'accord; je devine peut-être que le compilateur a été accidentellement faire de ce lieu, mais idk.
OriginalL'auteur Mehrdad