【问题标题】:Stl list of struct as a class memberstl 结构列表作为类成员
【发布时间】:2018-11-13 17:20:13
【问题描述】:

对于我的家庭作业,我必须用 C++ 编写一个 Game 类,该类具有名称、大小和包含更新日期和有关该更新的一些信息的更新列表。 (例如:22.05.2018 修复了任务 3 的错误)。这是我尝试过的,但它不起作用。游戏.h:

class Game{
 public:
  struct update{
     string date;
     string info;
 };
  string name;
  double size;
  list<update>l;
  Game(string name, double size, list<update>l);
  virtual ~Game();
 };

在 Game.cpp 中:

Game::Game(string name, double size, list<update>l){
    this->name=name;
    this->size=size;
    this->l=l;
 }

在 int main 我创建了一个列表:

int main()
{
  list<update>mylist;
  update u1,u2,u3;
  u1.date="20.05.2018";
  u1.info="Mission 3 bug fixed";
  u2.date="25.05.2018";
  u2.info="New quest";
  mylist.push_back(u1);
  mylist.push_back(u2);
  Game g("Gta5",60.0,mylist);
  return 0;
 }

我得到这个错误:

no matching function for call to 'Game::Game(const char [4], double, std::__cxx11::list<update>&)'|

【问题讨论】:

  • 请以minimal reproducible example 的形式提供可测试的代码,并准确解释如何它不起作用。你能指望什么?实际发生了什么?
  • 有什么问题?
  • 您使用std::list而不是std::vector的任何特殊原因?
  • “它不起作用”不是一个有用的问题描述。
  • 这个错误看起来有点奇怪,但我猜main 中的list&lt;update&gt; mylist; 应该是list&lt;Game::update&gt; mylist;,因为update 是一个嵌套类型。

标签: c++ list class stl


【解决方案1】:

或者如果你想保留嵌套类update

#include <string>
#include <list>


using std::string;
using std::list;

class Game{
public:
    struct update{
        string date;
        string info;
    };
    string name;
    double size;
    list<update>l;
    Game(string name, double size, list<update>l);
    virtual ~Game() {}
};


Game::Game(string name, double size, list<update>l){
    this->name=name;
    this->size=size;
    this->l=l;
}


int main()
{
    list<Game::update> mylist; // use Game::update to access nested class
    Game::update u1,u2,u3;
    u1.date="20.05.2018";
    u1.info="Mission 3 bug fixed";
    u2.date="25.05.2018";
    u2.info="New quest";
    mylist.push_back(u1);
    mylist.push_back(u2);
    Game g("Gta5",60.0,mylist);
    return 0;
}

【讨论】:

    【解决方案2】:

    试试这个,

    #include<bits/stdc++.h>
    using namespace std;
    
    struct update
    {
         string date;
         string info;
    
         update(string date,string info){
             this->date=date;
             this->info=info;
         }
    };
    
    class Game{
     public:
    
      string name;
      double size;
      list<update>l;
      Game(string name, double size, list<update>l);
     // virtual ~Game();
     };
    
     Game::Game(string name, double size, list<update>l){
        this->name=name;
        this->size=size;
        this->l=l;
     }
    
    int main(){
    
     list<update> l,m;
     l.push_front(update("10/10/2017","some bug fixed"));
     double size=100;
     string name="Game1";
     Game obj(name,size,l);
    
     cout<<obj.name<<" "<<obj.size<<" "<<endl;
     m=obj.l;
     list<update>::iterator i;
    
     for(i=m.begin();i!=m.end();i++){
        update structObj=*i;
        cout<<structObj.date<<" "<<structObj.info<<endl;   
     }     
    
     return 0;   
    } 
    

    输出

    游戏 1 100
    2017 年 10 月 10 日修复了一些错误

    【讨论】:

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