2010-03-03 5 views
-5

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?

+10

ce qui est l'erreur? – RvdK

+3

Veuillez fournir un exemple petit mais complet, et dites-nous de quelle manière cela échoue. –

+0

"Il suffit de trois pointeurs pour stocker un vecteur" - Whaaaaaa? –

Répondre

3

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; 
} 
+0

J'ai déjà vu cette raison, mais pourquoi? Et cela fonctionne mais je n'aime pas ce "travail autour". –

+0

@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

+1

@ 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. –

2
#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?

+0

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. –

+0

@ 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 * –

+0

Merci - fera. –

0

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.