初始化数组的C ++错误

时间:2014-05-07 18:26:46

标签: c++

我想初始化数组car.places [2] [3] 但阵列中总是为零。 请有人能告诉我我做错了什么, 这是代码:

#include <iostream>
#include <string>

using namespace std;

class reserv
{
public:
  int places[2][3];
} car;


int main () {

car.places[2][3] = (
            (1, 2, 3),
            (4, 5, 6)
        );

for(int i=0;i<2;i++)
{
    for(int j=0;j<3;j++)
    {
      cout << i << "," << j << " " << car.places[i][j] << endl;
    }
}

    return 0;
}

我从编译器得到这个警告:

>g++ -Wall -pedantic F_car_test.cpp
F_car_test.cpp: In function 'int main()':
F_car_test.cpp:16:11: warning: left operand of comma operator has no effect [
-Wunused-value]
       (1, 2, 3),
           ^
F_car_test.cpp:16:14: warning: right operand of comma operator has no effect
[-Wunused-value]
       (1, 2, 3),
              ^
F_car_test.cpp:17:11: warning: left operand of comma operator has no effect [
-Wunused-value]
       (4, 5, 6)
           ^
F_car_test.cpp:17:14: warning: right operand of comma operator has no effect
[-Wunused-value]
       (4, 5, 6)
              ^

提前致谢,

4 个答案:

答案 0 :(得分:1)

在没有循环的声明之后你不能这样做。

以下是如何在循环中执行此操作:

for (int i = 0; i < 2; ++i) {
    for (int j = 0; j < 3; ++j) {
        car.places[i][j] = 1 + 3 * i + j;
    }
}

答案 1 :(得分:1)

一旦创建了struct / class的对象,就无法初始化;出于某种原因,它被称为初始化。以这种方式初始化

#include <iostream>

struct reserv
{
  int places[2][3];
} car = {{{1, 2, 3}, {4, 5, 6}}};


int main()
{
  for(int i = 0; i < 2; ++i)
  {
    for(int j = 0; j < 3; ++j)
    {
      std::cout << i << "," << j << " " << car.places[i][j] << std::endl;
    }
  }
}

答案 2 :(得分:0)

此记录

car.places[2][3]

表示类库[2] [3]的数据成员位置(或更准确地说是对象车)。

数组已经创建为您在全局名称空间中定义的对象车的一部分。

改为写

class reserv
{
public:
  int places[2][3];
} car  = { {
            {1, 2, 3},
            {4, 5, 6}
         } };

答案 3 :(得分:0)

在C ++中,您只能在声明时使用初始化列表初始化数组。因为在这种情况下你的数组是一个类成员,你可以(并且应该)在构造函数中执行它。

 reserv::reserv():places{{1,2,3},{4,5,6}}{};

您必须启用std=c++0x才能使用此功能。