2009-04-16 6 views
0

je les types et les variables de données suivantes:initialize variables impliquant vecteur type de données

typedef Seq< vector<int> > MxInt2d; 
typedef std::vector<int> edge_t; 
typedef std::vector< edge_t> edge2d_t; 

std::vector<edge2d_t> myEdgesIntersect; 

J'ai essayé d'initialiser myEdgesIntersect comme:

edge2d_t edge2d(2); 

//creating the vector of edges of intersections whenever an intersection is detected 
for (int i=0;i<1;i++){ 
    edge2d[0][0]=sweepEvents[i][0]; 
    edge2d[0][1]=sweepEvents[i][1]; 
    edge2d[1][0]=sweepEvents[i+1][0]; 
    edge2d[1][1]=sweepEvents[i+1][1]; 
    std::cout<<edge2d[0][0]<<" "<<edge2d[0][1]<<endl; 
    std::cout<<edge2d[1][0]<<" "<<edge2d[1][1]<<endl; 
    myEdgesIntersect.push_back(edge2d); 
    std::cout<<myEdgesIntersect[i][0][0]<<" "<<myEdgesIntersect[i][0][1] 
      <<" "<<myEdgesIntersect[i][1][0]<<" "<<myEdgesIntersect[i][1][1]<<endl; 
} 

Mais en utilisant cette syntaxe lorsque je tente d'afficher la variable myEdgesIntersect ceci n'est pas initialisé avec les valeurs données de edge2d [..] [..] (qui pendant l'affichage sont correctes). J'ai essayé d'afficher la variable myEdgesIntersect avant le push_back et j'ai eu une erreur de bus, donc je pense que le problème est que la variable n'est pas initialisée. J'ai essayé de l'initialiser comme:

edge2d_t edge2d; 
edge2d[0][0]=0; 
edge2d[0][0]=0; 
edge2d[0][0]=0; 
edge2d[0][0]=0; 
edge2d[0][0]=0; 
myEdgesIntersect.push_back(edge2d); 

mais je suis la même erreur, comme cela est en fait la même chose que dans la boucle. Apparemment, je ne sais pas comment initialiser cette variable assez compliquée dont j'ai vraiment besoin. Si vous avez des suggestions, je serais plus qu'heureux.

merci à l'avance, Madalina

Répondre

0

Si la taille de votre tableau est vraiment fixé au moment de la compilation, alors vous pouvez être mieux regarder un tableau 2D, plutôt qu'un vecteur élément 2 contenant 2 2 vecteurs elemnet.

+0

Ce serait probablement résoudre le problème en évitant, mais il ne répond pas pourquoi son code est erroné. –

1

edge2d_t est un vecteur de vecteurs. Dans votre premier bloc de code que vous définissez la taille du vecteur externe lorsque vous instanciez votre variable edge2d, mais pas les vecteurs internes, donc ils sont la taille 0.

essayez ceci:

edge2d_t edge2d(2); 
edge2d[0].resize(2); 
edge2d[1].resize(2); 

//creating the vector of edges of intersections whenever an intersection is detected 
for (int i=0;i<1;i++){ 
     edge2d[0][0]=sweepEvents[i][0]; 
     edge2d[0][1]=sweepEvents[i][1]; 
     edge2d[1][0]=sweepEvents[i+1][0]; 
     edge2d[1][1]=sweepEvents[i+1][1]; 
     std::cout<<edge2d[0][0]<<" "<<edge2d[0][1]<<endl; 
     std::cout<<edge2d[1][0]<<" "<<edge2d[1][1]<<endl; 
     myEdgesIntersect.push_back(edge2d); 
     std::cout<<myEdgesIntersect[i][0][0]<<" "<<myEdgesIntersect[i][0][1] 
      <<" "<<myEdgesIntersect[i][1][0]<<" "<<myEdgesIntersect[i][1][1]<<endl; 
} 
1

Essayez:

edge2d_t ev(10, edge_t(10, 0)); 

(. changer la taille de 10 à quelque chose qui vous convient)

1

en plus de ce que John a dit, je soupçonne que votre « pour » la boucle peut avoir un arrêt par une erreur:

for (int i=0;i<1;i++){ // i will only be 0 

peut-être vous voulez

for (int i=0;i<=1;i++){ // i will iterate 0,1 
Questions connexes