römische Zahlen



  • Hallo zusammen, vllt kann mir jemand von euch helfen, soll für die Schule ein Programm mit Borland Developement Studio 2006 schreiben. In dem Programm sollen wir römische in arabische Zahlen umwandeln. Leider gibt er mir immer einen Linker Fehler aus und ich weiß nicht warum! Ich muss dazu sagen, das ich eher ein Neuling bin.

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    Close();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    int i=0,ausgabe=0,l;
    int Length();
    int LetterToInt(int letter)
    String eingabe;
    eingabe=Edit1->Text;
    for(i=0;i<eingabe.Length();i++)
    {
    		if((i+1)<=eingabe.Length())
    		{
    			if(LetterToInt(eingabe[i])<LetterToInt(eingabe[i+1]))
    			{
    				ausgabe -= LetterToInt(eingabe[i]);
    			}
    			else
    			{
    				ausgabe += LetterToInt(eingabe[i]);
    			}
    		}
    		else if(i==eingabe.Length())
    		{
    			ausgabe += LetterToInt(eingabe[i]);
    		}
    }
    Edit2->Text=IntToStr(ausgabe);
    }
    
    int LetterToInt(char letter)
    {
    	switch(letter)
    	{
    		case 'M': return 1000;
    		case 'D': return 500;
    		case 'C': return 100;
    		case 'L': return 50;
    		case 'X': return 10;
    		case 'V': return 5;
    		case 'I': return 1;
    		default:  return -1;
    	}
    }
    

    Der Fehler lautet dann:
    [Linker Fehler] Error: Ungelöste externe 'LetterToInt(int)' referenziert von J:\C++\ZAHLEN\DEBUG_BUILD\UNIT1.OBJ

    Wie kann ich das beheben bzw. was habe ich nicht beachtet?

    Gruß N3M0



  • ok, den Fehler hab ich gefunden, hatte in der Funktionsdeklaration nicht char stehen, sondern int

    soweit kompiliert er jetzt auch alles, leider kommt nun, wenn ich Button1 klicke ein weiterer Fehler:

    Zugriffsvertzung bei Adresse 51F07A07 in Modul 'rtl100.bpl'. Lesen von Adresse 001AE860.
    Was das nu wieder?

    Gruß N3M0



  • ich glaub da haste dich ein bissl mit der switch anweisung vertahen...

    char LetterToInt(int number) 
    { 
        switch(number) 
        { 
            case 1000: return 'M'; 
            ...  
        } 
    }
    

    (nich getestet, da ich nich zuhaus bin)

    ich denke ma das da der fehler steckt



  • vielleicht hab ich das auch verwechselt ... aber der benutzer soll M, C, L usw. eingeben und die Ausgabe erfolgt dann in Dezimalzahlen ... also denke ich, dass die switch richtig sein sollte, oder? sorry für das missverständnis

    gruß n3m0



  • n3m081 schrieb:

    soweit kompiliert er jetzt auch alles, leider kommt nun, wenn ich Button1 klicke ein weiterer Fehler

    In welcher Zeile?



  • Abend!

    Beliebter Fehler: AnsiString [] beginnt nicht bei 0 sonder bei 1!
    Demnach Zeile 27:

    for(i=1;i<eingabe.Length()+1;i++)
    

    Hab's nicht ausprobiert, der Fehler sollte dann aber schon mal weg sein.

    Gruß
    Markus


Anmelden zum Antworten