C++ 回推矢量<struct>MyVector 和错误 C2664

C++ Pushback vector<struct>MyVector And Error C2664

本文关键字:MyVector gt C2664 错误 struct lt C++      更新时间:2023-10-16

首先,我对向量本身还很陌生,所以请耐心等待。

我正在尝试制作一个包含2个字符串、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;

在我的函数.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::vector>::push_back(constOpiskelijanTiedot&)':无法将参数1从"float"转换为'OpiskelijanTiedot&amp;'

我已经搜索这个问题很长时间了,但无法摆脱这个问题,所以非常感谢任何帮助或为我指明正确的方向。我猜它在某种程度上有问题,我不知道什么是字符串int等等,但我搞不清楚。谢谢

Tiedot是OpiskelijanTiedot的向量,而temp.Arvosana是一个浮点。

你应该做

Tiedot.push_back(temp)

您的函数存在语法错误,编译器指出了这些错误。不能将stringintfloat类型的对象推送到OpiskelijanTiedot s的vector

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

void oppilas(vector<OpiskelijanTiedot>& Tiedot, int laskuri) {
                                 //  ^^^ Change the argument type to a reference
   OpiskelijanTiedot temp;
   cout << "Etunimi: ";
   cin.ignore();
   cin >> temp.etunimi;
   cout << "Sukunimi: ";
   cin >> temp.sukunimi;
   cout << "Tehtyjen harjoitustehtavien maara: ";
   Tiedot.push_back(temp.HarjMaara);
   cout << "Harjoitustyon arvosana: ";
   cin >> temp.Arvosana;
   // Add the object to the vector.
   Tiedot.push_back(temp);
}