首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递给函数的c++11数组出错

传递给函数的c++11数组出错
EN

Stack Overflow用户
提问于 2013-04-03 02:19:07
回答 3查看 2.9K关注 0票数 3

我正在按照this YouTube视频教程系列来试用c++11阵列。虽然我不是很熟练地使用我的集成开发环境,但我有两个集成开发环境,Eclipse和Codeblock,设置让编译器遵循C++0x ISO语言标准-std=c++0x,这至少允许他们理解c++11数组的语法,例如array <double, 5> rainfall;两者都以相同的方式响应。我编写的以下代码将此数组传递给一个函数,该函数将此数组输出。

代码语言:javascript
复制
#include <iostream>
#include <array>

using namespace std;

void printArray(double[], int);

int main()
{
    array <double, 5> rainfall;

    rainfall[0] = 2.3;
    rainfall[1] = 0.3;
    rainfall[2] = 0.0;
    rainfall[3] = 4.1;
    rainfall[4] = 0.5;

    printArray(rainfall, 5);

    return 0;
}

void printArray(double array[], int size)
{
    for(int i = 0; i < size; i++)
    {
        cout << array[i] << " | ";
    }
}

对于非c++11数组,例如double rainfall[5],这工作得很好,但是对于array <double, 5> rainfall,有一个错误,它显示cannot convert 'std::array<double, 5u>' to 'double*' for argument '1' to 'void printArray(double*, int)我正在关注的视频使用相同的代码,但没有收到这个错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-03 02:21:12

您可以将rainfall.data()传递给函数。std::array<T, N>不能隐式转换为T[N]

票数 4
EN

Stack Overflow用户

发布于 2013-04-03 02:41:58

正如你所看到的,在你使用的视频中,这家伙使用了一个静态的,c风格的数组,它可以隐式地转换为T*,但你使用的是一个c++11数组,它没有隐式转换为静态数组。不过,C++11的数组类有方法数据,可以让您直接访问底层数据,这在您的情况下也可以做到。

但在这种情况下,如果您希望将函数与c++11数组一起使用,则可以像这样进行重载:

template <typename T, size_t Size> void printArray(const std::array<T, Size>& arr);

这将适用于任何大小,并且您不需要为size传递另一个(不需要的)参数;)

票数 9
EN

Stack Overflow用户

发布于 2013-04-03 02:25:02

或者您可以将该函数定义为

代码语言:javascript
复制
void printArray (const array <double, 5>& myarray, int size)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15771391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档