C ++ Pushback向量<struct> MyVector和错误C2664

时间:2015-11-28 07:25:18

标签: c++ vector struct push-back

首先,我很擅长自己,所以请耐心等待。

我正在尝试制作一个包含2strings,int和float的向量。

这是我的结构:

struct OpiskelijanTiedot {

   string etunimi;
   string sukunimi;
   int HarjMaara;
   float Arvosana;

   OpiskelijanTiedot() : etunimi(), sukunimi(), HarjMaara(), Arvosana() {}
   OpiskelijanTiedot(string const& e, string const& s, int const& h, float const& a) :
         etunimi(e), sukunimi(s), HarjMaara(h), Arvosana(a) {}
   bool operator<(OpiskelijanTiedot const& rhs) const
   {
      return sukunimi < rhs.sukunimi;
   }
};

然后在Main.cpp中我创建了一个这样的矢量:vector<OpiskelijanTiedot> Tiedot;

在我的functions.cpp中我有这个:

void oppilas(vector<OpiskelijanTiedot>Tiedot, int laskuri) {
   OpiskelijanTiedot temp;
   cout << "Etunimi: ";
   cin.ignore();
   cin >> temp.etunimi;
   Tiedot.push_back(temp.etunimi);
   cout << "Sukunimi: ";
   cin >> temp.sukunimi;
   Tiedot.push_back(temp.sukunimi);
   cout << "Tehtyjen harjoitustehtavien maara: ";
   cin >> temp.HarjMaara;
   Tiedot.push_back(temp.HarjMaara);
   cout << "Harjoitustyon arvosana: ";
   cin >> temp.Arvosana;
   Tiedot.push_back(temp.Arvosana);
}

所以我收到了这个错误:

  

说明项目文件行   错误C2664
  “无效   的std ::矢量&GT; ::的push_back(常量   OpiskelijanTiedot&amp;)':无法将参数1从'float'转换为   'OpiskelijanTiedot&amp;&amp;'

我一直在寻找这个问题已经有很长一段时间了,无法摆脱这个问题,所以非常感谢任何帮助或指向正确的方向。我猜它在某种程度上有问题我没有告诉什么是字符串int等,但我无法弄明白。谢谢!

2 个答案:

答案 0 :(得分:1)

Tiedot是OpiskelijanTiedot的矢量,而temp.Arvosana是浮动。

你应该做

Tiedot.push_back(temp)

答案 1 :(得分:1)

您的函数有语法错误,编译器指出了这些错误。您无法将stringintfloat类型的对象推送到vector的{​​{1}}。

另一个错误是您的函数正在向输入OpiskelijanTiedot添加项目,但更改仅影响vector的副本,因为参数是对象,而不是引用。如果您希望更改向向量中添加项以反映在调用函数中,则必须将参数类型更改为引用。

vector