Russian Qt Forum
Ноябрь 23, 2024, 08:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сообщение "cannot allocate an object of abstract type" в Qt. Глюк?  (Прочитано 10360 раз)
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
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #1 : Август 23, 2014, 22:42 »

Не достаточно информации.

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

Сообщений: 170


Просмотр профиля
« Ответ #2 : Август 23, 2014, 22:54 »

Проблема в строке
std::vector<OutputUnit> outputUnits;
Вы пытаетесь создать вектор из объектов, имеющих абстрактный тип данных, это невозможно. Класс OutputUnit - абстрактный и невозможно создать экземпляр этого класса.
Записан
spongebob
Гость
« Ответ #3 : Август 23, 2014, 23:26 »

Спасибо, за совет
Цитировать
Проблема в строке
std::vector<OutputUnit> outputUnits;

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

Сообщений: 170


Просмотр профиля
« Ответ #4 : Август 24, 2014, 11:19 »

У ребят из MS свои взгляды на реализацию стандарта. И реализация STL насколько я слышал сильно отличается у них.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Август 25, 2014, 17:54 »

Не могу понять почему прежний вариант на VS всётаки работает?

Потому что "VS строже следует стандартам, чем GCC"
Записан
Bepec
Гость
« Ответ #6 : Август 25, 2014, 18:45 »

offtop: Ктото произнёс формулу вызова?

Не стоит путать STL библиотеки и компилятор Улыбающийся

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

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

PS пустословов много, но пока ни одного опровержения нет Улыбающийся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Август 25, 2014, 21:23 »

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

Ну так это ты сперва должен доказать своё утверждение, а ты ограничился туманными фразами.
Записан
Bepec
Гость
« Ответ #8 : Август 25, 2014, 21:26 »

Если вы не замечали, то в теме где то обсуждалось я разложил действия MSVC на пукнты и на каждый пункт привёл цитату из стандарта. Убедиться в этом может каждый, взяв стандарт и использовав поиск Улыбающийся

А вот у вас явное незнание предмета Веселый Ибо Visual Studio это IDE и следовать стандарту оно никак не может Улыбающийся Нет стандартов на IDE Веселый Есть стандарт на язык и следует ему только компилятор Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #9 : Август 25, 2014, 21:31 »

Если вы не замечали, то в теме где то обсуждалось я разложил действия MSVC на пукнты и на каждый пункт привёл цитату из стандарта. Убедиться в этом может каждый, взяв стандарт и использовав поиск Улыбающийся
Вы опять фантазируете? Улыбающийся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #10 : Август 25, 2014, 21:39 »

Если вы не замечали, то в теме где то обсуждалось я разложил действия MSVC на пукнты и на каждый пункт привёл цитату из стандарта. Убедиться в этом может каждый, взяв стандарт и использовав поиск Улыбающийся

Значит я это пропустил, где эта ссылка, я бы почитал?
Записан
Bepec
Гость
« Ответ #11 : Август 25, 2014, 22:04 »

Цитировать
то в теме где то обсуждалось
то в теме, где ТО обсуждалось.

Тему поищите сами Улыбающийся А без доводов спорить бессмысленно - оппонента нет.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #12 : Август 26, 2014, 14:36 »

то в теме, где ТО обсуждалось.

Тему поищите сами Улыбающийся А без доводов спорить бессмысленно - оппонента нет.

Что такое ТО? Дай ссылку, я не хочу разгребать сотни комментариев.
Записан
Bepec
Гость
« Ответ #13 : Август 26, 2014, 14:47 »

offtop: Я не в курсе, эт вы меня призвали Улыбающийся Где я? Почему я в пентаграмме? O_o

PS хотите подискутировать - создавайте тему с кодом, примером и выдержками. А я вашу теорию буду оспаривать. Улыбающийся
« Последнее редактирование: Август 26, 2014, 16:49 от Bepec » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 23.