【问题标题】:C++ problem in declaring a struct声明结构时的 C++ 问题
【发布时间】:2011-09-20 17:34:34
【问题描述】:

我看不出以下(非常做作的)代码有什么问题。这可能是我在mystruct 中声明大小为 2 的向量的方式。但这不就是我们声明一个大小为 2 的向量的方式,它的内容我们还没有初始化吗?

struct mystruct
{
  int a;
  int b;
  vector<double> c(2);    };

   int main(int argc, char *argv[])
{
  mystruct test;
  (test.c)[0]=3.4;
  (test.c)[1]=1.8;
  return 0;    }

编译器向我抛出以下错误消息:

g++ -Wall simple.cpp

simple.cpp:18:错误:数字常量之前的预期标识符

simple.cpp:18: 错误:数字常量前应为“,”或“...”

simple.cpp:在函数'int main(int, char**)'中:

simple.cpp:32:错误:数组的无效类型“[int]” 下标

simple.cpp:33:错误:数组下标的无效类型“[int]”

【问题讨论】:

    标签: c++ struct


    【解决方案1】:

    您不能在类定义中初始化mystruct::c,这必须在构造函数中完成。

    struct mystruct {
      mystruct() : c(2) { }
      vector<double> c;
    };
    

    【讨论】:

      【解决方案2】:

      您正在尝试在您的 struct 声明中构造 c。向量仅在构造时具有大小。试试:

      struct mystruct {
          mystruct(): c(2) {}
          int a;
          int b;
          vector<double> c;
      };
      

      mystruct() 构造函数使用成员初始化语法c(2) 构造c

      【讨论】:

        【解决方案3】:

        如果要初始化向量,需要一个构造函数(调用向量的构造函数)

        struct mystruct
        {
          int a;
          int b;
          vector<double> c;
        
          mystruct():
            c(2)
            {
        
            }
        };
        

        【讨论】:

          【解决方案4】:

          这不是 C++ 的工作原理。

          当您声明一个类时,您不能为成员对象指定构造函数(静态常量积分除外)。相反,您必须为类的构造函数初始化器列表中的成员指定构造函数参数:

          class Foo
          {
            std::vector<int> v;
          public:
            Foo() : v(2) { }
          };
          

          【讨论】:

            【解决方案5】:

            这不是一个有效的声明:

            vector<double> c(2);
            

            你可能想要:

            vector<double> c;
            

            然后,主要:

            int main(int argc, char *argv[])
            {
                 mystruct test;
                 test.c.push_back(3.4);
                 test.c.push_back(1.8);
                 return 0;
            }
            

            【讨论】:

              猜你喜欢
              • 2021-12-03
              • 1970-01-01
              • 1970-01-01
              • 2022-01-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多