【问题标题】:Vector declaration "expected parameter declarator"向量声明“预期参数声明符”
【发布时间】:2017-01-26 09:10:21
【问题描述】:

我在一个类的私有成员变量中有一行代码:

vector<double> dQdt(3)

在 xcode 中编译时,会出现“预期参数声明符”错误。我想我提供了足够的信息。我认为这个声明没有任何问题。

【问题讨论】:

    标签: c++ vector


    【解决方案1】:

    你必须在构造函数的初始化列表中初始化变量:

    class X 
    {
        private:
         vector<double> dQdt;
        public:
         X() : dQdt(3) {}
    };
    

    【讨论】:

      【解决方案2】:

      如果您阅读例如this member initialization reference 您将了解到默认成员初始化必须是大括号或等于初始化程序。 IE。您需要使用花括号:

      std::vector<double> dQdt{ 0.0, 0.0, 0.0 };
      

      或使用等号:

      std::vector<double> dQdt = std::vector<double>(3);
      

      由于这是随 C++11 标准引入的,因此您需要在您的环境中启用它。

      【讨论】:

      • 但那些不是一回事。第一个创建了一个值为 3 的元素。第二个创建了 3 个默认初始化的元素(在本例中为 0.0)。
      • @Someprogrammerdude,如果你把@Raman's anwser 和你的答案结合起来,你会得到最好的答案!然后,它将清楚地涵盖所有 3 种有效技术:1)在类或结构构造函数中使用初始化列表,如 @Raman 所示,或者 2)在变量声明的位置使用大括号初始化器 type var{some_default_val};(如您所示),或者 3) 使用等号字符 type var = some_default-val;(就像你也展示的那样)。
      【解决方案3】:

      数据成员的构造函数的参数应该写在你类的构造函数的初始化列表中。也就是说,而不是

      class Foo {
          vector<double> dQdt(3);
      };
      

      你应该写

      class Foo {
      public:
          Foo() : dQdt(3) {}
      private:
          vector<double> dQdt;
      };
      

      【讨论】:

        【解决方案4】:

        除了在构造函数的初始化列表中进行初始化,还可以使用大括号初始化列表进行初始化:

        class Foo {
            vector<double> dQdt{3};
        };
        

        错误的实际文本是因为编译器希望您声明一个函数,接受某种类型的参数,并返回vector&lt;double&gt;3 不是函数参数的有效声明。

        【讨论】:

        • 这将创建一个带有单个元素 3 的向量。与 OP 的代码不同,如果它有效,它将创建 3 个零。
        【解决方案5】:

        我在尝试编译具有初始化向量的 C++ 代码时遇到此错误。 在初始化部分将 () 更改为 {} 对我有用; 之前我的代码是这样的:

        vector<vector<int>> minA(11, vector<int>(11, INT_MAX));
        

        我更改了代码以用大括号替换圆括号,错误消失了。

        vector<vector<int>> minA{11, vector<int>(11, INT_MAX)};
        

        【讨论】:

        • 这对我有用。有什么地方可以让我了解更多信息吗?
        【解决方案6】:

        以下问题已经得到解答,但也可以。
        (这对于分配初始值可能更有用。例如 24 乘以 42。)

        const int default_value = 42;
        
        struct foo
        {
            vector<double> hour{vector<double>(24,default_value)};
        };
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-09
          • 2018-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多