Я пишу проект для класса, и мне нужно, чтобы моя программа считала арифметические выражения из входного файла и оценила их. К сожалению, всякий раз, когда я пытаюсь реализовать мой заголовок ternaryCondition.h, моя отладка выдает три
subexpression.cpp (75): ошибка C4703: потенциально неинициализированная переменная локального указателя 'первая' использованная
subexpression.cpp (75): ошибка C4703: потенциально неинициализированная переменная локального указателя 'second' используется
subexpression.cpp (75): ошибка C4703: потенциально неинициализированная переменная локального указателя «третья» используется
Это мой второй опыт работы с C ++, поэтому я чувствую, что просто что-то упустил полностью.
Я пытался отключить проверки / sdl, но когда я это сделал, я обнаружил, что моя программа больше не может читать построчно через мой входной файл и оценивать выражения.
Это файл subexpressions.cpp, который выбрасывает ошибку до 75-й строки, где происходит ошибка:
#include <iostream>
using namespace std;
#include "expression.h"
#include "subexpression.h"
#include "operand.h"
#include "plus.h"
#include "minus.h"
#include "times.h"
#include "divide.h"
#include "greaterThan.h"
#include "lessThan.h"
#include "equal.h"
#include "and.h"
#include "or.h"
#include "negation.h"
#include "ternaryCondition.h"
#include <sstream>
SubExpression::SubExpression(Expression* left, Expression* right)
{
this->left = left;
this->right = right;
}
SubExpression::SubExpression(Expression* first, Expression* second, Expression* third)
{
this->first = first;
this->second = second;
this->third = third;
}
SubExpression::SubExpression(Expression* left)
{
this->left = left;
}
Expression* SubExpression::parse(stringstream& in)
{
Expression* left;
Expression* right;
Expression* first;
Expression* second;
Expression* third;
char operation, paren;
bool isTernary = false;
left = Operand::parse(in);
cin >> operation;
right = Operand::parse(in);
if (operation == ':')
{
first = left;
second = right;
left = Operand::parse(in);
cin >> operation;
right = Operand::parse(in);
if (operation == '?')
{
third = right;
isTernary = true;
}
}
cin >> paren;
if (isTernary == true)
{
return new TernaryCondition(first, second, third);
//THE LINE ABOVE IS LINE 75 WHERE THE ERROR IS BEING THROWN
}
switch (operation)
{
И это заголовок ternaryCondition.h на случай, если это может вызвать проблемы:
class TernaryCondition : public SubExpression
{
public:
TernaryCondition(Expression* first, Expression* second, Expression* third) :
SubExpression(first, second, third)
{
}
int evaluate()
{
return third->evaluate() ? first->evaluate() : second->evaluate();
}
};
Смысл этой части моего кода в том, что программа может вычислять выражения вроде
(((z <(50 + aa)) & (bb!)) * ((3 / cc) | (1: 0? (Z> aa)), z = 4, aa = 2, bb = 4, куб.см = 2;
Извините, если я отправил это в неподходящем формате, это моя первая публикация.
ДОБАВЛЕНО подвыражение.h ФАЙЛ ЖАТКИ:
class SubExpression : public Expression
{
public:
SubExpression(Expression* left, Expression* right);
SubExpression(Expression* left);
SubExpression(Expression* first, Expression* second, Expression* third);
static Expression* parse(stringstream& in);
protected:
Expression* left;
Expression* right;
Expression* first;
Expression* second;
Expression* third;
};