Почему функция не возвращает значение

Рейтинг: 0Ответов: 1Опубликовано: 06.05.2023

Ошибка: функция push должна возвращать значение. Задача в целом создать контейнерный класс на основе массива с доступом по принципу стека. Ф-я push добавляет новый элемент в массив, перед этим происходит проверка, осталось ли место.

#include <iostream>

class Stack {
    int* m_head;
    int m_size;
    int m_index;
public:
    Stack(int size) : m_size{ size }, m_index{ 0 } {
        m_head = new int[size]; 
    }
    ~Stack() {
        delete[] m_head;
    }
    bool push (int x){
        if (m_index < m_size) {
            m_head[m_index++] = x;
            return true;
        }
        std::cout << "the stack is full" << std::endl;
        return false;
    }
};  
int main() {
    int n = 5;
    Stack stack{n};
    for (int i = 0; i < n; i++) {
        if (!stack.push(i)) return;
    }
 }

Ответы

▲ 3Принят

Проблема в том, что функция main возвращает int.

А у вас просто return. Без возвращаемого значения... Вот компилятор и недоволен.

Напишите что-то вроде

if (!stack.push(i)) return 0;

Кстати, ваше Ошибка: функция push должна возвращать значение. — неправда. Например, VC++ говорит

error C2561: main: функция должна возвращать значение

О push, как видите, и слова нет.

GCC пишет то же самое:

prog.cpp: In function ‘int main()’:
prog.cpp:31:29: error: return-statement with no value, in function returning ‘int’ [-fpermissive]
         if (!stack.push(i)) return;
                             ^~~~~~

(см. https://ideone.com/BpVJCH)

Так что будьте внимательны, читая сообщения об ошибках...