不能在阵列上使用.begin()或.END() [英] Cannot use .begin() or .end() on an array

查看:143
本文介绍了不能在阵列上使用.begin()或.END()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

错误读取:


  

请求成员'开始'在'改编',这是无类类型为int [5],结束,
  我们无法根据前pression错误推断。


我的code:

 的#include<&iostream的GT;
使用命名空间std;诠释的main()
{
    INT * mypointer;    INT ARR [5] = {1,3,5,7,9};    mypointer = ARR;    为(自动它= arr.begin(!);它= arr.end(); ++吧){
        COUT<< * mypointer<< ENDL;        mypointer ++;
    }    返回0;
}


解决方案

数组没有成员函数,因为它们不是类类型。这是错误的说法。

您可以使用的std ::开始(ARR)的std ::结束(ARR)<&迭代器GT; 头而不是。这也适用与类型做的有无 .begin() .END()成员,通过重载:

 的#include<阵列GT;
#包括LT&;矢量>#包括LT&;&迭代器GT;诠释的main()
{
    INT c_array [5] = {};
    的std ::阵列< INT,5个cpp_array = {};
    的std ::矢量<&INT GT; cpp_dynarray(5);    汽车c_array_begin =的std ::开始(c_array); // = c_array + 0
    汽车c_array_end =的std ::结束(c_array); // = c_array + 5    汽车cpp_array_begin =的std ::开始(cpp_array); // = cpp_array.begin()
    汽车cpp_array_end =的std ::结束(cpp_array); // = cpp_array.end()    汽车cpp_dynarray_begin =的std ::开始(cpp_dynarray); // = cpp_dynarray.begin()
    汽车cpp_dynarray_end =的std ::结束(cpp_dynarray); // = cpp_dynarray.end()
}

The error reads:

request for member 'begin', 'end' in 'arr' which is non class type int[5], unable to deduce from expression error.

My code:

#include <iostream>
using namespace std;

int main()
{
    int * mypointer;

    int arr[5] = {1,3,5,7,9};

    mypointer = arr;

    for(auto it = arr.begin(); it != arr.end(); ++it) {
        cout<<*mypointer<<endl;

        mypointer++;
    }

    return 0;
}

解决方案

Arrays have no member functions as they aren't a class type. This is what the error is saying.

You can use std::begin(arr) and std::end(arr) from the <iterator> header instead. This also works with types that do have .begin() and .end() members, via overloading:

#include <array>
#include <vector>

#include <iterator>

int main()
{
    int c_array[5] = {};
    std::array<int, 5> cpp_array = {};
    std::vector<int> cpp_dynarray(5);

    auto c_array_begin = std::begin(c_array); // = c_array + 0
    auto c_array_end = std::end(c_array);     // = c_array + 5

    auto cpp_array_begin = std::begin(cpp_array); // = cpp_array.begin()
    auto cpp_array_end = std::end(cpp_array);     // = cpp_array.end()

    auto cpp_dynarray_begin = std::begin(cpp_dynarray); // = cpp_dynarray.begin()
    auto cpp_dynarray_end = std::end(cpp_dynarray);     // = cpp_dynarray.end()
}

这篇关于不能在阵列上使用.begin()或.END()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆