Russian Qt Forum

Программирование => С/C++ => Тема начата: spongebob от Август 23, 2014, 22:38



Название: Сообщение "cannot allocate an object of abstract type" в Qt. Глюк?
Отправлено: spongebob от Август 23, 2014, 22:38
Всем доброго времени суток

В Qt начинающий, так что прошу сильно не пинать ногами если вопрос глупый

Проблема вот в чем
При компиляции получаю вышеуказанное сообщение
Вот хедер
Код:
#ifndef MATHEXPRESSIONPARSER_H
#define MATHEXPRESSIONPARSER_H

#include<string>
#include <iostream>
#include <sstream>
#include<vector>


using namespace std;

namespace MMCalculator{
    enum TokenType
    {
        OPERAND = 0,
        OPERATOR = 2
    };

    enum OperatorType
    {
        ADDITION = 0,
        SUBTRACTION = 1,
        MULTIPLICATION = 2,
        DIVISION = 3
    };

    class OutputUnit
    {
    public:
        virtual TokenType getTokenType() = 0;
    };

    class Operand : OutputUnit
    {
    private:
        double value;
    public:
        Operand(double value);
        double getValue();
        TokenType getTokenType();
    };

    class Operator : OutputUnit
    {
    private:
        OperatorType operatorType;
    public:
        Operator(OperatorType operatorType);
        OperatorType getOperatorType();
        TokenType getTokenType();
    };

    class MathExpressionParser
    {
    private:
        std::istream* inputStream;
        std::vector<OutputUnit> outputUnits;
        std::vector<Operator> stack;
        void procDigit();
    public:
        double parseExpression(std::string expression);
    };
}

#endif // MATHEXPRESSIONPARSER_H

В cpp файле все имплементировано....

В VisualStudio все проходит нормально

В чем может быть проблема?
Зараннее благодарен за помощь
С уважением
spongebob


Название: Re: Сообщение "cannot allocate an object of abstract type" в Qt. Глюк?
Отправлено: _Bers от Август 23, 2014, 22:42
Не достаточно информации.

попробуйте выложить куда нибудь на онлайн компилятор минимальный код иллюстрирующий проблему


Название: Re: Сообщение "cannot allocate an object of abstract type" в Qt. Глюк?
Отправлено: Swa от Август 23, 2014, 22:54
Проблема в строке
std::vector<OutputUnit> outputUnits;
Вы пытаетесь создать вектор из объектов, имеющих абстрактный тип данных, это невозможно. Класс OutputUnit - абстрактный и невозможно создать экземпляр этого класса.


Название: Re: Сообщение "cannot allocate an object of abstract type" в Qt. Глюк?
Отправлено: spongebob от Август 23, 2014, 23:26
Спасибо, за совет
Цитировать
Проблема в строке
std::vector<OutputUnit> outputUnits;

Проблема действительно оказалась в этом. Както выпало из моего поля зрения. Потому что изначально класс был не абстрактный
Заменил std::vector<OutputUnit> outputUnits; на std::vector<OutputUnit*> outputUnits; или на std::vector<void*> outputUnits; все работает.
Не могу понять почему прежний вариант на VS всётаки работает?


Название: Re: Сообщение "cannot allocate an object of abstract type" в Qt. Глюк?
Отправлено: Swa от Август 24, 2014, 11:19
У ребят из MS свои взгляды на реализацию стандарта. И реализация STL насколько я слышал сильно отличается у них.


Название: Re: Сообщение "cannot allocate an object of abstract type" в Qt. Глюк?
Отправлено: Alex Custov от Август 25, 2014, 17:54
Не могу понять почему прежний вариант на VS всётаки работает?

Потому что "VS строже следует стандартам, чем GCC"


Название: Re: Сообщение "cannot allocate an object of abstract type" в Qt. Глюк?
Отправлено: Bepec от Август 25, 2014, 18:45
offtop: Ктото произнёс формулу вызова?

Не стоит путать STL библиотеки и компилятор :)

Аргументируйте поведение с цитатами из стандарта и тогда я заинтересуюсь и у нас будет интересная дискуссия на эту тему.

to Alex Gustov: вы формулу вызова переврали.
Цитировать
MSVC строже следует стандартам, чем GCC.
Вот так верно :)

PS пустословов много, но пока ни одного опровержения нет :)


Название: Re: Сообщение "cannot allocate an object of abstract type" в Qt. Глюк?
Отправлено: Alex Custov от Август 25, 2014, 21:23
PS пустословов много, но пока ни одного опровержения нет :)

Ну так это ты сперва должен доказать своё утверждение, а ты ограничился туманными фразами.


Название: Re: Сообщение "cannot allocate an object of abstract type" в Qt. Глюк?
Отправлено: Bepec от Август 25, 2014, 21:26
Если вы не замечали, то в теме где то обсуждалось я разложил действия MSVC на пукнты и на каждый пункт привёл цитату из стандарта. Убедиться в этом может каждый, взяв стандарт и использовав поиск :)

А вот у вас явное незнание предмета :D Ибо Visual Studio это IDE и следовать стандарту оно никак не может :) Нет стандартов на IDE :D Есть стандарт на язык и следует ему только компилятор :)


Название: Re: Сообщение "cannot allocate an object of abstract type" в Qt. Глюк?
Отправлено: Old от Август 25, 2014, 21:31
Если вы не замечали, то в теме где то обсуждалось я разложил действия MSVC на пукнты и на каждый пункт привёл цитату из стандарта. Убедиться в этом может каждый, взяв стандарт и использовав поиск :)
Вы опять фантазируете? :)


Название: Re: Сообщение "cannot allocate an object of abstract type" в Qt. Глюк?
Отправлено: Alex Custov от Август 25, 2014, 21:39
Если вы не замечали, то в теме где то обсуждалось я разложил действия MSVC на пукнты и на каждый пункт привёл цитату из стандарта. Убедиться в этом может каждый, взяв стандарт и использовав поиск :)

Значит я это пропустил, где эта ссылка, я бы почитал?


Название: Re: Сообщение "cannot allocate an object of abstract type" в Qt. Глюк?
Отправлено: Bepec от Август 25, 2014, 22:04
Цитировать
то в теме где то обсуждалось
то в теме, где ТО обсуждалось.

Тему поищите сами :) А без доводов спорить бессмысленно - оппонента нет.


Название: Re: Сообщение "cannot allocate an object of abstract type" в Qt. Глюк?
Отправлено: Alex Custov от Август 26, 2014, 14:36
то в теме, где ТО обсуждалось.

Тему поищите сами :) А без доводов спорить бессмысленно - оппонента нет.

Что такое ТО? Дай ссылку, я не хочу разгребать сотни комментариев.


Название: Re: Сообщение "cannot allocate an object of abstract type" в Qt. Глюк?
Отправлено: Bepec от Август 26, 2014, 14:47
offtop: Я не в курсе, эт вы меня призвали :) Где я? Почему я в пентаграмме? O_o

PS хотите подискутировать - создавайте тему с кодом, примером и выдержками. А я вашу теорию буду оспаривать. :)