C++ классы, преобразовать программу

221
18 марта 2018, 21:25

Был код, калькулятор римских и арабских чисел. Нужно его преобразовать, чтобы был в 3 файла main.cpp, class.cpp и class.h. Я вроде что-то пытался сделать. Ну собственно классы пихал в заголовочный, функцию из int main в class.cpp, а в main.cpp оставлял только вызов этой функции. В class.cpp есть строчка Number::Number(), на которую собственно и ругается программа, что-то вроде функция уже имеет текст реализации.

main.cpp

#include <iostream>
#include "class.h"
#include <stdlib.h>
#include <string.h>
using namespace std;
int main()
{
    class Number * calc;
    calc = new Number();
    getchar();
    delete calc;
    system("pause");
    return 0;
}

class.cpp

#include "class.h"
#include <iostream>
#include <stdlib.h>
#include <string.h>
Number::Number()
{
    Number *l, *r;
    char x[256], y[256], oper;
    int rezult;
    cin >> x >> oper >> y;
    if (x[0] >= '0' && x[0] <= '9')
        l = new ArabicNumber(x);
    else
        l = new RomanNumber(x);
    if (y[0] >= '0' && y[0] <= '9')
        r = new ArabicNumber(y);
    else
        r = new RomanNumber(y);
    switch (oper)
    {
    case '+':
        rezult = l->getValue() + r->getValue();
        break;
    case '-':
        rezult = l->getValue() - r->getValue();
        break;
    case '*':
        rezult = l->getValue() * r->getValue();
        break;
    case '/':
        rezult = l->getValue() / r->getValue();
        break;
    }
    cout << l->getValue() << ' ' << oper << ' ' << r->getValue() << " = " << rezult << endl;
};

class.h

#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
class Number
{
public:
    Number()
    {
        value = 0;
    }
    int getValue() const
    {
        return value;
    }
protected:
    int value;
};
class RomanNumber : public Number
{
public:
    RomanNumber(const char *c)
    {
        if (strcmp(c, "I") == 0)
            value = 1;
        else if (strcmp(c, "II") == 0)
            value = 2;
        else if (strcmp(c, "III") == 0)
            value = 3;
        else if (strcmp(c, "IV") == 0)
            value = 4;
        else if (strcmp(c, "V") == 0)
            value = 5;
        else if (strcmp(c, "VI") == 0)
            value = 6;
        else if (strcmp(c, "VII") == 0)
            value = 7;
        else if (strcmp(c, "VIII") == 0)
            value = 8;
        else if (strcmp(c, "IX") == 0)
            value = 9;
        else if (strcmp(c, "X") == 0)
            value = 10;
    }
};
class ArabicNumber : public Number
{
public:
    ArabicNumber(const char *c)
    {
        value = atoi(c);
    }
};
Answer 1

Ну и что вы привели в качестве кода? Вполне нормально компилируемый текст. С единственной проблемой - если oper будет неверным - rezult будет содержать не пойми что.

Откуда же нам знать, какие ошибки вы наделали при разделении текста на части?..

Скорее всего, оставили в заголовочном файле определение

class Number
{
public:
    Number()
    {
        value = 0;
    }

Но при этом зачем-то в .cpp-файле еще раз записали определение Number::Number().

Но чтоб отвечать уверенно - надо видеть соответствующий текст.

READ ALSO
expected primary-expression before &#39;*&#39; token

expected primary-expression before '*' token

Добрый день, подскажите пожалуйста, что я делаю не так? Хочу создать структуру из двух байтов и указателя на функцию, прикомпиляции выдает...

220
Ошибка в работе деструктора

Ошибка в работе деструктора

Помогите пожалуйста разобраться в данной ошибкеСам еще только учусь, поэтому потратил большое количество времени, пытаясь разобраться в этом

224
Подключение *.pas файла к проекту в C++ Builder

Подключение *.pas файла к проекту в C++ Builder

Имеется проект в C++ Builder, также имеется файл форматаpas содержащий довольно большое количество нужного кода

177
Проблемы с QTime C++/Qt

Проблемы с QTime C++/Qt

Есть конструктор для класса, в который передается начальное время:

180