перевод римских цифр в десятичные

Эй, ребята, я думаю, что я действительно близок с, но я не слишком уверен, как продолжить. Все вопросы, связанные с моей проблемой, на самом деле ничего не отвечают. Ошибка, которую я получаю прямо сейчас, является

(33): error C2064: term does not evaluate to a function taking 1 arguments
(41): error C2064: term does not evaluate to a function taking 1 arguments

Заголовочный файл:

using namespace std;

class romanType
{
public: 
    void printRoman(char romanNum);
    int printDecimal(int& total);
    int convertRoman(int& total);
    void setRoman(char& roman);

    romanType();
    romanType(char);

private:
    char romanNum[6];
    int decimal;
    int total;
};

Реализация:

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include "romanType.h" 

using namespace std;

romanType::romanType(char)
{

};
void romanType::printRoman(char romanNum)
{
    cout << "Here is your number in Roman Numeral form: " << romanNum << endl;
};

int romanType::printDecimal(int& total)
{
    cout << "Here is your number in Decimal form: " << total << endl;
    return total;
};

void romanType::setRoman(char& romanNum)
{

};
int romanType::convertRoman(int& total)
{
    int len = 0;
    len = strlen(romanNum);
    int count[1];

     for(int i = 0; i < len; i++)
     {           
           switch(romanNum[i])
           {
                 case 'M':
                      count[i] = 1000;
                      break;
                 case 'm':
                      count[i] = 1000;
                      break;
                 case 'D':
                      count[i] = 500;
                      break;
                 case 'd':
                      count[i] = 500;
                      break;
                 case 'C':
                      count[i] = 100;
                      break;
                 case 'c':
                      count[i] = 100;
                      break;
                 case 'L':
                      count[i] = 50;
                      break;
                 case 'l':
                      count[i] = 50;
                      break;
                 case 'X':
                      count[i] = 10;
                      break;
                 case 'x':
                      count[i] = 10;
                      break;
                 case 'V':
                      count[i] = 5;
                      break;
                 case 'v':
                      count[i] = 5;
                      break;
                 case 'I':
                      count[i] = 1;
                      break;
                 case 'i':
                      count[i] = 1;
                      break;
                 default:
                      cout << "Error.." << endl;
           }   
           total = total + count[0];
     }
     return total;
};

Моя основная:

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include "romanType.h"

using namespace std;

int main()
{
    romanType r;

    char romanNum;
    char choice;
    int decimal;
    int total;

    cout << "Hello! Please enter your Roman Numeral: " << endl; 
    cin >> romanNum; 
    cout << endl;


    r.setRoman(romanNum);
    r.convertRoman(total);

    cout << "Do you want the Roman Numeral or the Decimal?" << endl;
    cout << "Press [D] for Decimal!" << endl << "Press [R] for Roman Numeral!" << endl;

    cin >> choice;

    if (choice == 'D' || choice == 'd')
         r.printDecimal(total);
    else if (choice == 'R' || choice == 'r')
         r.printRoman(romanNum);
    else
        cout << "That wasn't the right button!" << endl;

    system ("pause");
    return 0;
}

Я почти уверен, что я на правильном пути. Было бы неплохо увидеть какие-либо советы или советы, касающиеся моих ошибок.

Заранее спасибо


person user2726756    schedule 28.08.2013    source источник
comment
Какие строки 33 и 41?   -  person Barmar    schedule 28.08.2013
comment
Кстати, проблема в том, что напишите программу, которая преобразует число, введенное римскими цифрами, в десятичное. Должен состоять из класса romanType и объекта, который делает следующее: Сохраняет число как римскую цифру Преобразует и сохраняет число в десятичной форме Печатает число как римскую цифру или десятичное число по запросу пользователя Десятичные значения римские цифры: M = 1000 D = 500 C = 100 L = 50 X = 10 V = 5 I = 1   -  person user2726756    schedule 28.08.2013
comment
r.convertRoman(всего); и r.printDecimal (всего);   -  person user2726756    schedule 28.08.2013
comment
Римские цифры складываются в обратном порядке. Вы начинаете с правого конца, добавляя значения до тех пор, пока они увеличиваются или равны по значению, а затем вычитаете из этого накопления, когда вы встречаете числительное меньше чем предыдущее число.   -  person WhozCraig    schedule 28.08.2013
comment
Ваша программа работает только с одной римской цифрой, а не с целым римским числом. Это то, что вы намеревались?   -  person Barmar    schedule 28.08.2013
comment
Кроме того, симптомы, которые вы описываете, предполагают, что ваш код компилируется с другим заголовком, чем тот, который вы здесь показываете. Возможно, старая копия или вы не сохранили файл после его обновления перед компиляцией. Кроме того, вы объявляете, но никогда не определяете конструктор romanType::romanType(). Он есть в заголовочном файле, но нигде в файлах реализации.   -  person WhozCraig    schedule 28.08.2013
comment
r.convertRoman(total); здесь total не инициализирован.   -  person Alexandru Barbarosie    schedule 28.08.2013
comment
Это ошибки компилятора? Мне удалось его скомпилировать (как только я определил неопределенный romanType::romanType()). Итак, @WhozCraig что-то задумал...   -  person lurker    schedule 28.08.2013
comment
Эта строка явно неверна, но это не ошибка, которую вы получаете: len = strlen(romanNum); strlen() требует char* в качестве аргумента, но romanNum является char.   -  person Barmar    schedule 28.08.2013


Ответы (1)


Просто взглянув на код, я могу предложить просмотреть в окне отладки значения ваших переменных на каждом этапе. То, что я вижу, это две переменные, один тип char с именем romanNum и совершенно другой, представляющий собой массив символов с именем romanNum. Это немного сбивает с толку, но может работать, если вы запрашиваете у пользователя только один символ римскими цифрами, тогда вам вообще не нужен массив. В противном случае вы можете получить строку, а затем преобразовать ее в массив.

Начните с этого и посмотрите, поможет ли это.

person Brandon Z    schedule 28.08.2013
comment
ОП получает ошибки компилятора. Они как бы не могут заглянуть в окно отладки без предварительной компиляции... - person Angew is no longer proud of SO; 28.08.2013