Как исправить ошибку: не соответствует «оператор<<" (типы операндов "std::ostream {он же std::basic_ostream}» и «пустота») при использовании строк и стека

#c #c 14 #cout #dsa

Вопрос:

Я начинающий специалист по изучению структур данных и алгоритмов. Я пытался сделать это :

 #include<iostream>
#include<ostream>
#include<stack>
#include<string>
using namespace std;

int main (){
    string original ;
    string a = "";

    std::stack<string> library;
    
    cin >> original;

    for(int i=1; i < original.size() -1; i  ){
        char b = original[i];
        if(!((b == '/' ) || (b == '\' ))){
            a = a   b;
        }
        else{
            library.push(a);
            a = "";
        };
    };
    for(int j=0; j < library.size(); j  ){
        cout << library.pop() ;
    }
    return 0;
}
 

но компилятор показывает следующую ошибку :

 prog.cpp:26:14: error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream<char>}’ and ‘void’)
         cout << library.pop() ; 
 

Я использовал cout << много раз, но никогда не сталкивался с этой ошибкой.

Ответ №1:

Вопреки вашей интуиции, std::stack::pop() ничего не возвращает ( void ). https://en.cppreference.com/w/cpp/container/stack/pop и void не может быть напечатан.

Вы, наверное, хотите этого:

     for(int j=0; j < library.size(); j  ){
        cout << library.top() ;
        library.pop();
    }