Nikolai Cekov
Nikolai Cekov

Reputation: 167

Queue from struct type

Ok, that is my struct:

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

Next I create queue:

queue<sudurjanie> q;

But when I write this:

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

In error list write this:

IntelliSense: a nonstatic member reference must be relative to a specific object

Ok, when I try this:

cout << q.back();

, why write this:

no operator "<<" matches these operands

?

Upvotes: 2

Views: 10865

Answers (4)

Attila
Attila

Reputation: 28762

Your reference to sudurjanie.stoka_ime is invalid as you are naming a member of the type, not an instance of it.

Try:

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

This will create an instance of sudurjanie, named tmp, read the field, then push the instance onto the queue

Upvotes: 3

mathematician1975
mathematician1975

Reputation: 21351

Your queue is a queue of sudurjanie structs. What you are trying to push into the queue is

a) the name of your struct and not an instance

b) a member of the struct (a string).

Upvotes: 0

Anon Mail
Anon Mail

Reputation: 4770

Read the item in first and then add the struct to the queue.

Upvotes: 0

cdhowie
cdhowie

Reputation: 168988

It sounds like you may have wanted to do this instead:

queue<sudurjanie> q;

sudurjanie item;
cin >> item.stoka_ime;

q.push(item);

The line cin>>q.push(sudurjanie.stoka_ime); doesn't make any sense. Literally, it means:

  1. Pass sudurjanie.stoka_ime to q's push() method. This will fail, because push() takes an argument of type sudurjanie while you have supplied an argument of type string.
  2. Read from cin into the result of the push() call, which is void. This will fail because it makes no sense to read into void.

Upvotes: 6

Related Questions