首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问一个关于vector中push_back的有关问题。多谢!

2012-03-09 
请教一个关于vector中push_back的问题。谢谢!!!下面是我的代码,在VS2003下编译总是出现如下编译错误:errorC

请教一个关于vector中push_back的问题。谢谢!!!
下面是我的代码,在VS2003下编译总是出现如下编译错误:
error   C2036:   “const   std::vector <_Ty> ::pointer”   :   未知的大小
我建的是一个控制台的程序。如果双击这个错误就定位到vector的内部实现代码了。可是如果把FaultPolyLine.push_back(temp_Polyline);   这一行注释掉的话编译可以通过。不知是何原因,怀疑是不是push_back的问题,困扰小弟很长时间,请各位帮帮忙!谢谢!!!!

#include   "stdafx.h "

#include   "KeyPillarUtil.h "
#include   "PolyLine3D.h "           //   一个自己写的PolyLine3D类

#include   <algorithm>

bool   WorseThan(const   Point3D&   pts,   const   Point3D&   pte)
{
if(pts.GetZ()   <=   pte.GetZ())
return   true;
else
return   false;
}

void   KeyPillarUtil::ResamplingKeyPillar(const   vector <   vector <Point3D>   > &   vecPolyines,double   dSampleDis,   FaultPlane3D*   pFP3D   )
{
double   temp_dSampleDis   =   dSampleDis;
vector <PolyLine3D>   FaultPolyLine;
//   vector <   Point3D   > ::iterator   itLine;
vector <   vector <Point3D>   > ::const_iterator   itPlane;
vector <   PolyLine3D   > ::iterator   itPolyLine;

for(itPlane   =   vecPolyines.begin();   itPlane   !=   vecPolyines.end       ();   itPlane++)
{
PolyLine3D   temp_Polyline(*itPlane);
FaultPolyLine.push_back(temp_Polyline);     //   问题所在行
}

Point3D   temp_point;
Point3D   temp_ptEnd;
Pillar3D   temp_pillar;

for(itPolyLine   =   FaultPolyLine.begin();   itPolyLine   !=   FaultPolyLine.end();   itPolyLine++)
{
//itPolyLine-> FromTopPoint(0.0,   &temp_point);
//temp_pillar.vecPoint.push_back(temp_point);
}

sort(temp_pillar.vecPoint.begin(),   temp_pillar.vecPoint.end(),   WorseThan);

pFP3D-> vecPillar.push_back(temp_pillar);

bool   bSampleFlag   =   true;

while(bSampleFlag)
{
for(itPolyLine   =   FaultPolyLine.begin();   itPolyLine   !=   FaultPolyLine.end();   itPolyLine++)
{
//itPolyLine-> FromTopPoint(temp_dSampleDis,&temp_point);
//itPolyLine-> FromEndPoint(0.0,&temp_ptEnd);
if(temp_point   ==   temp_ptEnd)
bSampleFlag   |=   false;
temp_pillar.vecPoint.push_back(temp_point);                                
}
sort(temp_pillar.vecPoint.begin(),   temp_pillar.vecPoint.end(),   WorseThan);
pFP3D-> vecPillar.push_back(temp_pillar);
temp_dSampleDis   +=   dSampleDis;
}

}

其中头文件KeyPillarUtil.h定义如下:
#ifndef   KEYPILLARUTIL_H_
#define   KEYPILLARUTIL_H_

#include   <string>

#include   <vector>
using   namespace   std;

#include   "Point3D.h "             //   是一个自己写的Point3D的类
#include   "Vector3D.h "           //   是一个自己写的Vector3D类


struct   Pillar3D
{
vector <Point3D>   vecPoint;
};

struct   FaultPlane3D
{
string   strFaultName;
vector <   Pillar3D   >   vecPillar;
};


struct   KeyPillarUtil
{
static   void   ResamplingKeyPillar(   const   vector <   vector <Point3D>   > &   vecPolyines,
double   dSampleDis,   FaultPlane3D*   pFP3D   );
};

#endif



[解决办法]
PolyLine3D temp_Polyline(*itPlane);

*itPlane是vector <Point3D> ,
它可以用来构建PolyLine3D吗?

把PolyLine3D的代码贴出来吧:)
[解决办法]
double temp_dSampleDis = dSampleDis;
vector <PolyLine3D> FaultPolyLine;
// vector < Point3D > ::iterator itLine;
vector < vector <Point3D> > ::const_iterator itPlane;
vector < PolyLine3D > ::iterator itPolyLine;

for(itPlane = vecPolyines.begin(); itPlane != vecPolyines.end (); itPlane++)
{
PolyLine3D temp_Polyline(*itPlane);
FaultPolyLine.push_back(temp_Polyline); // 问题所在行
}
> itPlane对二维向量进行遍历
> 以二维的大小去增加一个PolyLine3D类型的向量?
> PolyLine3D类型的向量的大小是多少,就算已知,也不一定不保证越界吧
> 是PolyLine3D的问题
[解决办法]
up
[解决办法]
重新建一下工程
[解决办法]
最好dll只导出C风格的东西
========================
mark之
[解决办法]
vector <PolyLine3D> FaultPolyLine;
// vector < Point3D > ::iterator itLine;
vector < vector <Point3D> > ::const_iterator itPlane;
你的这个声明中,注释掉的那行和第一行是匹配的,如果你想按第三行的实现,则第一行应为:
vector < vector <Point3D> > FaultPolyLine;
[解决办法]
copy constructor 有问题:
PolyLine3D::PolyLine3D( const vector <Point3D> & vecPoint )
{
vector <Point3D> ::const_iterator cit = vecPoint.begin();
for( cit ++; cit != vecPoint.end(); cit ++ )
{
vector <Point3D> ::const_iterator cit1 = cit;
cit1 --;
Segment3D seg( *cit1, *cit );
m_vecSeg3D.push_back( seg );
}
}
如果vecPoint是空的,那么进入循环时,cit是vecPoint.end()之后的一个元素,这里有异常

热点排行