Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
kiwokr
3 / 3 / 1
Регистрация: 01.07.2016
Сообщений: 45
Завершенные тесты: 1
#1

Ошибки во время компиляции программы - C++

16.07.2016, 23:28. Просмотров 325. Ответов 15
Метки нет (Все метки)

Ребята помогите с лексемами разобраться.... Что-то я запутался уже в конец...
Не получается присваивать значения хоть убей.. Просто не хочет и всё тут.
C++
1
2
3
4
5
class TOKEN
{
char chr;
double value;
};
Создаю вот такой класс. Затем по задумке должна вводиться строка (программа аля калькулятор). 2+4+3*2-21 и т.д.
Реализовывал через
C++
1
2
3
vector <TOKEN> cal;
 while (cin>>a)
 cal.push_back(a);
Но почему-то компиляция не проходит...
Пробовал в ручную присваивать значения, на подобии:
C++
1
2
cal[0] = 1;
cal[1] = '1';
и т.д. тоже не хочет....
буду очень благодарен если кто-то объяснит причину.. Ссылки на литературу можете не кидать, учебников больше чем нужно, основной Страуструпа...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2016, 23:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибки во время компиляции программы (C++):

Возникают непонятные ошибки во время компиляции кода - C++
возникла проблема с ошибками. не могу понять, как исправить, помогите, пожалуйста. #include &lt;stdio.h&gt; #include&lt;iostream&gt; ...

Ошибки компиляции простейшей программы - C++
Новичок - только начал осваивать С++ написал первую программу в Visual Studio при выполнении Build Solution выпадает куча ошибок. Текст...

ошибки при компиляции программы С++ - C++
Подскажите где я совершил ошибки. Вот задача:Составить класс файл. Класс должен обладать следующими свойствами:путь к файлу, имя файла,...

Исправить ошибки компиляции программы - C++
#include &lt;iostream&gt; #include &lt;string&gt; int _tmain(int argc, _TCHAR* argv) { std::string str; std::cout«&quot;Enter a binary...

Ошибки при компиляции программы - C++
#include &quot;StdAfx.h&quot; #include &quot;math.h&quot; #include &lt;stdio.h&gt; #include &lt;iostream&gt; using namespace std; int main () { ...

При компиляции простой программы - ошибки - C++
Работаю в простой IDE. Занимаюсь по учебникам и по видео на ютубе, при компиляции кода появляются ошибки (покажу на скриншоте) Причем я...

15
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6521 / 3160 / 311
Регистрация: 04.12.2011
Сообщений: 8,762
Записей в блоге: 5
16.07.2016, 23:47 #2
Цитата Сообщение от kiwokr Посмотреть сообщение
while (cin>>a)
cal.push_back(a);
это же нельзя в глобальной области оставлять. Оно в методе должно быть и a должна быть объявлена.
Может что-то попроще попробовать сначала?
0
kiwokr
3 / 3 / 1
Регистрация: 01.07.2016
Сообщений: 45
Завершенные тесты: 1
16.07.2016, 23:53  [ТС] #3
IGPIGP, разумеется а объявлена и даже инициализирована, от греха подальше ... просто не целиком код писал, а описал пути по которым пошёл... И почему нельзя использовать ? В векторах double,string всё отлично работало... не работает почему-то именно если такой класс, опять же если проблема в цикле, то почему прямая инициализация вектора не работат
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6521 / 3160 / 311
Регистрация: 04.12.2011
Сообщений: 8,762
Записей в блоге: 5
16.07.2016, 23:57 #4
Цитата Сообщение от kiwokr Посмотреть сообщение
и даже инициализирована
Это хорошо, но избыточно, - cout присвоит. Покажите код не в замочную скважину и покажите реакцию компилятора. Вообще, задача достаточно громоздка, но не сложна и решаема. Главный вопрос в том, не рановато ли.
И ещё. Перегрузите оператор ввода >>. А то Вы вводите целое число, а думаете, что вводите объект Вашего класса. Оператор преобразования от char тоже помог бы, но лучше вводить поля, а потом конструировать объект и push его в back.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13563 / 7714 / 873
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
17.07.2016, 00:00 #5
Цитата Сообщение от kiwokr Посмотреть сообщение
Пробовал в ручную присваивать значения, на подобии:
Так само собой не прокатит, оно же у Вас и не int, и не char,
да и оно не доступно, оно же в private.
Цитата Сообщение от kiwokr Посмотреть сообщение
Но почему-то компиляция не проходит...
Что пишет? Читать будем?
1
_Ivana
3202 / 1829 / 153
Регистрация: 01.03.2013
Сообщений: 5,050
Записей в блоге: 4
17.07.2016, 00:02 #6
Я правильно понимаю, что товарищ хочет волшебного автоматического цина из строки в свой тип Токен?

Цитата Сообщение от kiwokr Посмотреть сообщение
буду очень благодарен если кто-то объяснит причину
Думаю, причина в излишней вере в волшебство
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6521 / 3160 / 311
Регистрация: 04.12.2011
Сообщений: 8,762
Записей в блоге: 5
17.07.2016, 00:04 #7
Цитата Сообщение от IGPIGP Посмотреть сообщение
Оператор преобразования от char тоже помог бы
конструктор преобразования от char тоже помог бы
0
kiwokr
3 / 3 / 1
Регистрация: 01.07.2016
Сообщений: 45
Завершенные тесты: 1
17.07.2016, 00:40  [ТС] #8
IGPIGP, Фигня какая-то короче... В векторах такие классы вообще допустимы ? Я правильно понимаю что в векторе каждый элемент должен иметь оба типа. Т.е. calc.value[0] и calc.chr[0] при vector <TOKEN> calc?? И при вводе в зависимости от типа инициализироваться определённый вариант calc.value[0] или же calc.chr[0]?? Или нужна функции для чтения данных из cin???
0
_Ivana
3202 / 1829 / 153
Регистрация: 01.03.2013
Сообщений: 5,050
Записей в блоге: 4
17.07.2016, 00:46 #9
C++
1
2
cal[0] = 1;
cal[1] = '1';
Цитата Сообщение от kiwokr Посмотреть сообщение
Я правильно понимаю что в векторе каждый элемент должен иметь оба типа.
......
Вот так статическая типизация мешает творить волшебство...
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6521 / 3160 / 311
Регистрация: 04.12.2011
Сообщений: 8,762
Записей в блоге: 5
17.07.2016, 00:52 #10
Цитата Сообщение от kiwokr Посмотреть сообщение
Я правильно понимаю что в векторе каждый элемент должен иметь оба типа
Вот. Это корень зуба мудрости. Удаляем:
Напишите конструктор:
C++
1
public: TOKEN(char a, doble b):chr(a), val(b){}
Потом при помощи ввода с консоли и/или других усилий получите две временных переменных char и double. Отдайте их конструктору временный объект от которого скопируется в элемент vector'a. То естьзапустите этот конструктор в методе push_back(Ctor(a,b)).

Добавлено через 3 минуты
Цитата Сообщение от _Ivana Посмотреть сообщение
Вот так статическая типизация мешает творить волшебство...
Она залог скорости. А волшебство минус скорость - залог страданий (магистр Йода).
0
_Ivana
3202 / 1829 / 153
Регистрация: 01.03.2013
Сообщений: 5,050
Записей в блоге: 4
17.07.2016, 01:02 #11
Цитата Сообщение от IGPIGP Посмотреть сообщение
получите две временных переменных char и double. Отдайте их конструктору временный объект от которого скопируется в элемент vector'a
можно и так, но моя телепатия подсказывает мне, что ТС нужно в каждом элементе массива вектора или чар или дабл, дабы потом калькулировать результат

Цитата Сообщение от IGPIGP Посмотреть сообщение
Она залог скорости. А волшебство минус скорость - залог страданий (магистр Йода)
Да ладно, Йода как известно был программистом на Форте, а там она вроде вообще бестиповая

ЗЫ ниче, в С++17 обещают std::any из коробки, и тогда начнется волшебная жизнь...
0
kiwokr
3 / 3 / 1
Регистрация: 01.07.2016
Сообщений: 45
Завершенные тесты: 1
17.07.2016, 01:03  [ТС] #12
Эх... всё равно что-то не так.... попробую уже завтра со свежими мозгами... Спасибо всем, за советы.
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6521 / 3160 / 311
Регистрация: 04.12.2011
Сообщений: 8,762
Записей в блоге: 5
17.07.2016, 01:07 #13
Цитата Сообщение от _Ivana Посмотреть сообщение
но моя телепатия подсказывает мне, что ТС нужно в каждом элементе массива вектора или чар или дабл, дабы потом калькулировать результат
Да ну?
Ну да! Вообще, в строке не бывает double. Там даже float не встретишь. Это надо парсить и создавать объект который может быть чем угодно: числом, скобкой, знаком операции, именем функции, вмешательством воли господней... .
Иначе лучше использовать поток вроде strstream и вынимать из него после каждого ENTER. Трудно понять о чём речь, поэтому так легко высказаться.
0
_Ivana
3202 / 1829 / 153
Регистрация: 01.03.2013
Сообщений: 5,050
Записей в блоге: 4
17.07.2016, 01:14 #14
IGPIGP, все симптомы на лицо (С)
Цитата Сообщение от kiwokr Посмотреть сообщение
Затем по задумке должна вводиться строка (программа аля калькулятор). 2+4+3*2-21 и т.д.
И как это
Цитата Сообщение от IGPIGP Посмотреть сообщение
в строке не бывает double
когда
Цитата Сообщение от kiwokr Посмотреть сообщение
В векторах double,string всё отлично работало...
тогда то было волшебство - а сейчас почему-то нет...
Цитата Сообщение от IGPIGP Посмотреть сообщение
Это надо парсить и создавать объект который может быть чем угодно: числом, скобкой, знаком операции, именем функции, вмешательством воли господней...
Тссс!... А то раскроете все секреты выживания в статически типизированных языках без алгебраических типов данных!
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6521 / 3160 / 311
Регистрация: 04.12.2011
Сообщений: 8,762
Записей в блоге: 5
17.07.2016, 01:32 #15
Цитата Сообщение от _Ivana Посмотреть сообщение
Тссс!...
Дык я чо... Я не чо.
0
17.07.2016, 01:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2016, 01:32
Привет! Вот еще темы с ответами:

Синтаксические ошибки при компиляции программы - C++
Доброго времени суток ребят, у меня к вам просьба, посмотреть в чем проблема. #include&lt;iostream&gt; using namespace std; int main() ...

При компиляции программы возникли ошибки - C++
Здравствуйте. Есть программа для работы с указателями и не хочет собираться, вот привожу исходный код: #include &lt;iostream&gt; ...

При компиляции программы в dev C++ выдает ошибки - C++
http://files.mail.ru/0JL3TJ

Синтаксические ошибки при компиляции программы на структуру - C++
#include &lt;iostream&gt; #include &lt;string.h&gt; #define n 4; using namespace std; struct OIL{ char marka; int litri; int cena; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.