【问题标题】:How to push_back in a vector?如何在向量中 push_back?
【发布时间】:2016-12-06 10:13:42
【问题描述】:

我做了一个类如下:

class Variable {
public:
  string name;
  double value;
};

用它来制作一个向量如下:

vector<Variable> var_table;

然后我创建了一个函数 is_declared 来检查给定的字符串名称是否已经存在于 var_table 中,并创建了另一个函数 define_name 将字符串的值和双精度值放入 var_table 中新变量的名称和值中,如下所示:

bool is_declared(string var) {
  for (int i = 0; i < var_table.size(); ++i)
    if (var_table[i].name == var)
      return true;
  return false;
}

double define_name(string var, double val) {
  if (is_declared(var))
    cerr << var << "declared twice";
  var_table.push_back(Variable{var, val});
  return val;
}

在一行

var_table.push_back(Variable{var,val});

它显示以下错误:

“{”标记之前的 238 个预期主表达式

请帮忙!!!

【问题讨论】:

  • 您使用的是支持 C++11 标准或更高标准的编译器吗?
  • 你需要一个支持 C++11 的编译器。
  • 从您发布的两个函数来看,std::map&lt;string,double&gt; 可能比std::vector&lt;Variable&gt; 更适合

标签: c++ vector compiler-errors


【解决方案1】:

您不能将初始化语法与低于 C++11 合规级别的 C++ 编译器一起使用。您必须使用Variable(var,val) 才能使其工作,或者使用较新的编译器编译代码。

小记 - 你考虑过使用set 来完成这样的任务吗?

【讨论】:

    【解决方案2】:

    首先你需要在你的变量类中提供一个构造函数来实例化变量的值。

    接下来,在一行中,

    var_table.push_back(Variable{var,val});
    

    你可以写成,

    var_table.push_back(Variable(var,val));
    

    【讨论】:

    • 完全不需要构造函数,大括号初始化有效且首选。
    猜你喜欢
    • 1970-01-01
    • 2013-03-28
    • 2021-06-23
    • 2020-11-20
    • 2023-04-06
    • 2016-11-16
    • 2017-03-24
    • 2020-08-09
    • 1970-01-01
    相关资源
    最近更新 更多