2012-06-12 2 views
2

Хорошо, что моя структура:очереди от типа структуры

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

Следующая создать очередь:

queue<sudurjanie> q; 

Но когда я пишу это:

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

В список ошибок записи это:

IntelliSense: нестатический опорный элемент должен быть по отношению к конкретному объекту

Хорошо, когда я пытаюсь это:

cout << q.back(); 

, зачем писать это:

ни один оператор "<<" не соответствует этим операнды

?

+0

Как это ошибка IntelliSense?Это кажется нечетным ... – JAB

+0

Вы должны * не * использовать двойную цену! (cena означает цену на некоторых славянских языках). –

ответ

6

Это звучит, как вы, возможно, хотели сделать это вместо того, чтобы:

queue<sudurjanie> q; 

sudurjanie item; 
cin >> item.stoka_ime; 

q.push(item); 

Линия cin>>q.push(sudurjanie.stoka_ime); не имеет никакого смысла. Буквально это означает:

  1. Pass sudurjanie.stoka_ime в q «s push() метод. Это не будет выполнено, потому что push() принимает аргумент типа sudurjanie, пока вы предоставили аргумент типа string.
  2. Прочтите от cin в результате вызова push(), который является void. Это провалится, потому что нет смысла читать в void.
+0

Хорошо, когда я пробую это: cout << q.back(); , зачем писать это: никакой оператор «<<» не соответствует этим операндам? –

+2

Поскольку вы пытаетесь написать объект типа 'sudurjanie'' 'cout', а' cout' не имеет представления о том, как он должен представлять этот тип. Вам нужно будет перегрузить функцию 'operator <<()' самостоятельно, чтобы это работало. Рассмотрим try 'cout << q.back(). Вместо этого stoka_ime << endl;'. – cdhowie

+0

Хорошо, но мне нужно получить все данные из q? –

0

Сначала прочитайте элемент, а затем добавьте структуру в очередь.

0

Ваша очередь - sudurjanie structs. То, что вы пытаетесь впихнуть в очередь является

а) название вашей структуры и не экземпляра

б) членом структуры (строка).

3

Ваша ссылка на sudurjanie.stoka_ime недействительна, так как вы называете членом тип, а не экземпляр его.

Try:

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

Это создаст экземпляр sudurjanie, названный tmp, читать поле, а затем нажмите на экземпляр на очереди

Смежные вопросы