2009-04-16 71 views
0

我有以下数据类型和变量:初始化变量涉及矢量数据类型

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

std::vector<edge2d_t> myEdgesIntersect; 

我试图初始化myEdgesIntersect像:

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

但是使用这个语法,当我尝试显示变量myEdgesIntersect这个没有使用给定值edge2d [..] [..](在显示过程中没问题)初始化。我试图在push_back之前显示变量myEdgesIntersect,并且出现总线错误,所以我认为问题在于该变量未初始化。我试图对其进行初始化,如:

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); 

,但我得到了同样的错误,因为实际上是同样的事情,在环。显然我不知道如何初始化这个非常复杂的变量,我真的需要。如果您有任何建议,我会更高兴。

由于事先 madalina

回答

0

如果阵列大小确实被固定在编译时则可能会更好看的2D阵列,而不是含2个2 elemnet矢量的2元素矢量。

+0

这可能会修复,避免它的问题,但它并没有解决,为什么他的代码是错误的。 – 2009-04-16 12:34:20

1

edge2d_t是向量的向量。在你的第一个代码块设置了外向量的大小,当你实例化你的edge2d变量,而不是内部的载体,所以它们的大小均为0.1

试试这个:

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

尝试:

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

(尺寸从10更改为适合你)

1

除了什么约翰说,我怀疑你的“for”循环可以有一个差一错误:

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

也许你想

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