C ++上的数组错误大小

时间:2015-04-16 19:07:38

标签: c++

我正在尝试获取数组大小但我收到错误。我的代码是:

#include <iostream>
#include <array>

using namespace std;
int main ()
{
 int myarray[5];
  cout << "size of array: " << myarray.size() << endl;
  cout << "sizeof array: " << sizeof(myarray) << endl;

  return 0;
}

这就是我得到的错误:

  

错误:请求会员&#39;尺寸&#39;在&#39; myarray&#39;,这是非类型的&#39; int [5]&#39; |

4 个答案:

答案 0 :(得分:10)

数组没有成员函数,因为它们不是类。但是,如果您使用std::array,则可以使用成员函数size

例如

#include <iostream>
#include <array>

using namespace std;
int main ()
{
  std::array<int, 5> myarray;

  cout << "size of array: " << myarray.size() << endl;
  cout << "sizeof array: " << sizeof(myarray) << endl;

  return 0;
}

如果您确实想要处理数组,那么程序可以采用以下方式

#include <iostream>
#include <type_traits>

int main()
{
    int myarray[5];

    std::cout << "sizeof myarray: " 
              << sizeof( myarray ) << std::endl;

    std::cout << "size of myarray: " 
              << sizeof( myarray ) / sizeof( *myarray ) << std::endl;

    std::cout << "size of myarray: " 
              << std::extent<decltype( myarray )>::value << std::endl;

    return 0;
}

程序输出

sizeof myarray: 20
size of myarray: 5
size of myarray: 5

注意标题std::extent

中声明的标准类<type_traits>

答案 1 :(得分:8)

尝试理解编译器给你的错误很重要,这里是说:

  

错误:请求'myarray'中的成员'size',这是非类型'int [5]'|

这意味着您尝试myarray.size,但myarray不是一个类,而是int[5]

这不是Java,数组没有size方法。 相反,您可以使用sizeof以字节为单位获取原始大小,并使用std::extent<decltype(myarray)>::value(在标题<type_traits>中)获取元素数。

请注意,如Vlad所述,您需要使用实际的std::array来设置大小函数,这与您使用的原始数组不同,可能与您想要的不同。

答案 2 :(得分:0)

C ++中的数组不是具有成员函数的类。如果需要类,请考虑使用STL类向量。

答案 3 :(得分:-1)

使用:

(sizeof(myarray)/sizeof(*myarray)) 

而不是:

myarray.size()