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

const修饰函数有关问题

2012-03-13 
const修饰函数问题//头文件#includeiostream#includevectorusingnamespacestdclassSpeedDataCollecti

const修饰函数问题
//头文件
#include   <iostream>
#include   <vector>

using   namespace   std;

class   SpeedDataCollection
{
public:
SpeedDataCollection();
void   addValue(int   tempSpeed);
void   display();
int   averageSpeed()   const;

private:
vector <int>   m_speed;
};

//.cpp
#include   "SpeedDataCollection.h "

SpeedDataCollection::SpeedDataCollection()
{
}

void   SpeedDataCollection::addValue(int   tempSpeed)
{
m_speed.push_back(tempSpeed);
}

int   SpeedDataCollection::averageSpeed()   const
{
int   total=0;
vector <int> ::iterator   iterS;
vector <int> ::iterator   iterE;

iterS=m_speed.begin();//并没有改变成员的值啊,为什么有错
iterE=m_speed.end();

for(;iterS!=iterE;iterS++)
{
total=total+(*iterS);

}

return   total/m_speed.size();
}

报的错:   error   C2440:   '= '   :   cannot   convert   from   'const   int   * '   to   'int   * '

请高手结合这个例子给小弟说说type   function()const类型的用法。

[解决办法]
vector的begin有两个成员成员函数:
iterator vector <type> ::begin()
const_iterator vector <type> ::begin() const
因为你的函数是const修饰的,所以调用的是第二个,这样就返回一个const_iterator了,所以有三种办法解决,任选其一:
1、vector <int> ::const_iterator iterS; //调用第二个函数begin() const
2、iterS=(int*)m_speed.begin(); //调用第二个函数
3、iterS=((SpeedDataCollection*)this)-> m_speed.begin(); //调用第一个函数begin()

热点排行