【问题标题】:c++ class array initializationc++ 类数组初始化
【发布时间】:2011-04-20 15:43:37
【问题描述】:

所以我在标题中有这个类

class C{

   int b [2];

   init();

}

在 C.cpp 我有

C::init(){

   bK [2] = {3,7};
}

我尝试初始化类变量 b,它是一个数组

但随后编译器返回错误expected ; before { tokenexpected primary expression before { token

我做错了什么以及如何正确初始化数组类变量?

【问题讨论】:

标签: c++ arrays class variables initialization


【解决方案1】:

; 结束您的类定义。

class C {

   int b [2];

   init();

};

此外,您不能在标准 C++ 中的声明之外初始化这样的数组。

【讨论】:

    【解决方案2】:

    您不能在 C++0x 之前的 C++ 中执行此操作。

    【讨论】:

      【解决方案3】:

      标准 (2003) 不允许这样做。类中声明的数组无法初始化。

      你可以这样做:

      C::init(){
         b[0] = 3;
         b[1] = 7;
      }
      

      在 C++0x 中,你可以这样做(如果你选择使用std::vector):

      class C
      {
         std::vector<int> b;
         void init() 
         { 
             b = {3,7}; 
         }
      };
      

      查看在线演示:http://www.ideone.com/NN5aT

      【讨论】:

        【解决方案4】:
        C::init(){
        
           bK [0] = 3;
           bk [1] = 7;
        }
        

        【讨论】:

          【解决方案5】:

          你应该将你的类成员声明为公共的、私有的或受保护的。而且你还需要一个 init() 的返回类型。您可能还需要在类定义的末尾使用分号,而 c++ 类成员不能这样做。

          您应该使用构造函数而不是 init()。这样您就不必在每次声明对象后调用 init(),它会为您完成。

          class C{
          private:
             int b[2];
          public:
             C();
          
          };
          
          C::C()
          {
              b[0] = 2;
              b[1] = 3;
          }
          

          编辑:在做了一些测试后,我发现它有问题。上面的代码没有错误。如果要内联初始化整个数组,则必须在其声明语句中完成。

          【讨论】:

            猜你喜欢
            • 2023-03-13
            • 1970-01-01
            • 1970-01-01
            • 2010-09-14
            • 2013-05-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多