Pourquoi ne puis-je faire ceci:Stockage vecteur dans une struct C++
struct sName {
vector<int> x;
};
Il ne prend que trois pointeurs pour stocker un vecteur, donc je devrais être en mesure de le faire?
Pourquoi ne puis-je faire ceci:Stockage vecteur dans une struct C++
struct sName {
vector<int> x;
};
Il ne prend que trois pointeurs pour stocker un vecteur, donc je devrais être en mesure de le faire?
Vous mentioned échoué dans une instruction de commutateur. Vous aurez besoin de l'envelopper dans une paire de bretelles:
int type = UNKNOWN;
switch(type)
{
case UNKNOWN:
cout << "try again" << endl;
break;
case KNOWN:
{ // Note the extra braces here...
struct sName
{
vector<int> x;
} myVector;
} // and here
}
Sinon, vous pourriez avoir déjà déclaré la structure, et essayez juste de déclarer et initialiser une variable locale. Ce n'est pas un problème unique à struct
, ça va arriver quand vous essayez d'initialiser une variable dans un boîtier:
struct sName
{
vector<int> x;
};
int type = UNKNOWN;
switch(type)
{
case UNKNOWN:
cout << "try again" << endl;
break;
case KNOWN:
{ // Note the extra braces here...
sName myVector;
} // and here
case OTHER:
int invalid = 0; // this will also fail without the extra pair of braces
break;
}
J'ai déjà vu cette raison, mais pourquoi? Et cela fonctionne mais je n'aime pas ce "travail autour". –
@prasoon: tous les 'cas' d'un commutateur sont dans la même portée. Une variable déclarée dans l'un d'entre eux est dans la portée de tous, mais l'initialisation pourrait être ignorée. Voir http://stackoverflow.com/questions/92396/why-cant-variables-be-declared-in-a-switch-statement – Bill
@ parasoon99: Ce n'est pas une solution de contournement - il exploite les fonctionnalités de la langue dans un manière qui était prévue et est valide. C'est juste quelque chose que tu n'es pas habitué. Je fais ça tout le temps. –
#include <vector>
using namespace std;
struct sName {
vector<int> x;
};
int main()
{
return 0;
}
compilé avec:
g++ -Wall 1.cpp
Compilé bien.
Ce qui semble être le problème avec votre code?
Lorsque je déclare une variable de ce type "struct sName z" dans une instruction switch, j'obtiens des erreurs: initialisation croisée de 'sName z' et 'jump to case label'. Sinon, le programme fonctionne bien. –
@ parasoon99: C'est un problème totalement différent. Créer un nouveau message avec le nouveau problème, mais cette fois * inclure les erreurs de compilation * –
Merci - fera. –
Vous pouvez le faire. En fait, ce que vous avez ci-dessus est correct et fonctionne bien (à part le point-virgule manquant et potentiellement absent std::
dans std::vector
). S'il vous plait, reformulez votre question pour qu'elle ne se contredise pas.
ce qui est l'erreur? – RvdK
Veuillez fournir un exemple petit mais complet, et dites-nous de quelle manière cela échoue. –
"Il suffit de trois pointeurs pour stocker un vecteur" - Whaaaaaa? –