好的,这是我的结构:
struct sudurjanie {
string stoka_ime;
string proizvoditel;
double cena;
int kolichestvo;
};
接下来我创建队列:
queue<sudurjanie> q;
但是当我写这篇文章时:
cin >> q.push(sudurjanie.stoka_ime);
在错误列表中写下以下内容:
智能感知:非静态成员引用必须相对于特定对象
好的,当我尝试这个时:
cout << q.back();
,为什么要写这个:
没有运算符
"<<"
与这些操作数匹配
?
听起来您可能想这样做:
queue<sudurjanie> q;
sudurjanie item;
cin >> item.stoka_ime;
q.push(item);
cin>>q.push(sudurjanie.stoka_ime);
线没有任何意义。 从字面上看,它的意思是:
- 将
sudurjanie.stoka_ime
传递给q
的push()
方法。 这将失败,因为push()
在提供类型为string
的参数时采用类型sudurjanie
的参数。 - 从
cin
读取push()
调用的结果,即void
。 这将失败,因为读入void
是没有意义的。
您对sudurjanie.stoka_ime
的引用无效,因为您命名的是该类型的成员,而不是它的实例。
尝试:
sudurjanie tmp;
cin >> tmp.stoka_ime;
q.push(tmp);
这将创建一个名为 tmp
的 sudurjanie
实例,读取字段,然后将实例推送到队列中
首先读取其中的项,然后将结构添加到队列中。
您的队列是sudurjanie
结构的队列。您尝试推送到队列中的是
a) 结构的名称,而不是实例的名称
b) 结构的成员(字符串)。