Почему gcc компилирует это, а msvc - нет

Вот мой класс

class ContainerStack{
public:
    int getCapacity();
    int getSize();
    const Container& at(int height);
    void take(Container aContainer);
    Container give();

private:
    std::vector<Container> containers();
};

Вот методы getCapacity () и getSize ()

int ContainerStack::getCapacity(){
    return containers.capacity();
}

int ContainerStack::getSize(){
    return containers.size();
}

GCC компилирует все без проблем, но при использовании Visual Studio 2017 я получаю ошибку Выражение E0153 должно иметь тип класса. Как это исправить?

предоставьте минимальный воспроизводимый пример и полное сообщение об ошибке. Что такое Container?

463035818_is_not_a_number 31.10.2018 13:59

..и версию компиляторов, которые вы использовали

463035818_is_not_a_number 31.10.2018 13:59
но при использовании Visual Studio 2017 я получаю выражение E0153, которое должно иметь ошибку типа класса Пожалуйста, опубликуйте точный текст сообщения об ошибке. Скопируйте его из вкладки «Вывод», а не из списка ошибок. Также создайте минимальный пример кода.
drescherjm 31.10.2018 14:00

Какой gcc вы используете? Здесь он не компилируется: coliru.stacked-crooked.com/a/f8fd9762c2b67506

NathanOliver 31.10.2018 14:02

Он не компилируется на gcc.

Marek R 31.10.2018 14:05

Контейнер - это еще один объект, но это не имеет значения, поскольку проблема касается функций .capacity () и .size (). Я использовал gcc версии 7.3.0 (Ubuntu 7.3.0-27ubuntu1 ~ 18.04)

Michał Tęgi 31.10.2018 14:06

@ MichałTęgi Ошибки не связаны с отсутствием Containter, поэтому ваш пример не компилируется ни на одном компиляторе.

Marek R 31.10.2018 14:06

и после удаления устаревших скобок он правильно компилируется на gcc.

Marek R 31.10.2018 14:13
1
8
73
1

Ответы 1

Вы определили containers как функция, возвращающий вектор:

std::vector<Container> containers();

Исправьте это:

std::vector<Container> containers;

Why does gcc compile this and msvc doesn't

Я подозреваю, что вы напортачили при переносе кода с gcc на msvc как заметил Натан Оливер.

Это была проблема, спасибо за помощь. Каким-то образом мое определение испортилось между двумя проектами.

Michał Tęgi 31.10.2018 14:11

@ MichałTęgi Лучше, чем сказать «спасибо», вы можете щелкнуть галочку под оценкой ответа, чтобы отметить его как принятый. Рад помочь.

YSC 31.10.2018 14:12

В этом помогает контроль версий Каким-то образом мое определение разошлось между двумя проектами. (например, git).

drescherjm 31.10.2018 14:23

Другие вопросы по теме