【问题标题】:Queue from struct type来自结构类型的队列
【发布时间】:2012-06-12 20:31:50
【问题描述】:

好的,这就是我的结构:

struct sudurjanie {
    string stoka_ime;
    string proizvoditel;
    double cena;
    int kolichestvo;
};

接下来我创建队列:

queue<sudurjanie> q;

但是当我写这个时:

cin >> q.push(sudurjanie.stoka_ime);

在错误列表中写下:

IntelliSense:非静态成员引用必须相对于特定对象

好的,当我尝试这个时:

cout << q.back();

,为什么要写这个:

没有运算符"&lt;&lt;" 匹配这些操作数

?

【问题讨论】:

  • IntelliSense 错误是怎么回事?这似乎有点奇怪......
  • 您应该使用双倍价格! (cena 在某些斯拉夫语中的意思是价格)。

标签: c++ struct queue


【解决方案1】:

听起来您可能想这样做:

queue<sudurjanie> q;

sudurjanie item;
cin >> item.stoka_ime;

q.push(item);

cin&gt;&gt;q.push(sudurjanie.stoka_ime); 行没有任何意义。字面意思是:

  1. sudurjanie.stoka_ime 传递给qpush() 方法。这将失败,因为 push() 采用 sudurjanie 类型的参数,而您提供了 string 类型的参数。
  2. cin 读取到push() 调用的结果,即void。这将失败,因为读入void 毫无意义。

【讨论】:

  • 好的,当我尝试这个时: cout
  • 因为您正在尝试将sudurjanie 类型的对象写入cout,而cout 不知道它应该如何表示这种类型。您需要自己重载 operator&lt;&lt;() 函数才能使其正常工作。考虑改用cout &lt;&lt; q.back().stoka_ime &lt;&lt; endl;
  • 好的,但我需要从 q 获取所有数据?
  • @Nikolai :也许是时候考虑从a good book重新开始了...
  • 如果您需要一般指导编程,这可能不是问的地方。 SO 处理的是具体问题,而不是“让我的整个程序工作”的问题,我们通常假设您至少对您所询问的编程语言有基本的了解。
【解决方案2】:

您对sudurjanie.stoka_ime 的引用无效,因为您正在命名类型 的成员,而不是它的实例。

试试:

sudurjanie tmp;
cin >> tmp.stoka_ime;
q.push(tmp);

这将创建sudurjanie 的实例,命名为tmp,读取字段,然后将实例推送到队列中

【讨论】:

    【解决方案3】:

    先读入项目,然后将结构体加入队列。

    【讨论】:

      【解决方案4】:

      您的队列是sudurjanie 结构的队列。你试图推入队列的是

      a) 结构的名称,而不是实例

      b) 结构的成员(字符串)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-23
        • 2022-06-10
        • 1970-01-01
        • 1970-01-01
        • 2016-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多