LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1360|回复: 3

帮忙看看这段c++代码的错误

[复制链接]
发表于 2009-7-2 09:54:56 | 显示全部楼层 |阅读模式
#include <vector>
#include <iostream>
using namespace std;
bool is_equal( const int *ia, int ia_size, const vector<int> ivec )
{
        if ( ia_size != ivec.size() )
                return false;
        for( vector<int>::iterator it = ivec.begin(); it != ivec.end(); ++it ){
                if ( *ia != *it )
                       return false;
                else{
                        ++ia;
                        ++it;
                }
        }
        return true;
}

int main()
{
        const int size = 4;
        int a[size]={0,1,2,3};
        const vector<int> b( a, a+6 );
        if(is_equal( a, size, b ))
               cout << "equle\n";
        else
                cout << "donot equle\n";

}
编译生成的错误为:
equal.cc: In function 'bool is_equal(const int*, int, std::vector<int, std::allocator<int> >)':
equal.cc:8: error: conversion from '__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >' to non-scalar type '__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >' requested
发表于 2009-7-2 11:42:49 | 显示全部楼层
元素的const的属性不一致。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-2 17:23:11 | 显示全部楼层
bool is_equal( const int *ia, int ia_size, const vector<int> ivec )
发现把这句改为:
bool is_equal( const int *ia, int ia_size, vector<int> ivec )
就通过了。
但是不知道为什么?
回复 支持 反对

使用道具 举报

发表于 2009-7-10 01:31:08 | 显示全部楼层
const vector<T>::begin() 返回的是 vector<T>::const_iterator,与 vector<T>::iterator 不是一个类型。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表