Linkerproblem



  • Ich habe folgendes Problem:
    Ich habe unter Visual Studio von MS mir ein Programm geschrieben welches auch wunderbar funktionierte, jetzt hab ich nur einen Teil in eine Funktion packen wollen und Visual Studio liefert folgende Fehler:

    error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""int __cdecl Umwandlung(char)" (?Umwandlung@@YAHD@Z)" in Funktion "_main". RoemischeZahlen.obj

    und

    fatal error LNK1120: 1 nicht aufgelöste externe Verweise.

    Hier noch mein Programm:

    #include<iostream>
    using namespace std;
    
    int const ARRAY = 20;
    
    int Umwandlung (char cRoem);
    
    int main()
    {
     int const ARRAY = 20;
     char cRoem[ARRAY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
     int ergebnis = 0;
     int iZaehler = 0;
     char *ptr = cRoem;
    
     cout<<"Bitte geben sie hier die röm Zahl ein: ";
     cin>> cRoem;
     cout<<endl <<endl; 
     cout<<Umwandlung (*ptr);
     cout<<endl;
     system("pause");
    
     return 0;
    }
    
    int Umwandlung (char *cRoem)
    {
    	 int ergebnis = 0;
         int iZaehler = 0;
    	  int iDezi[ARRAY];
    
        while(cRoem[iZaehler] != 0)
      {
       iZaehler++;
      }
    
       for(int i = 0; i <= iZaehler; i++)
    	{
    		switch(cRoem[i])	
    		{
    		  case 'i':
    		  case 'I': iDezi[i] = 1; break;
    		  case 'v':
    		  case 'V': iDezi[i] = 5; break;		
    		  case 'x':
    		  case 'X': iDezi[i] = 10; break;	
    		  case 'd':
    		  case 'D': iDezi[i] = 50; break;
    		  case 'c':
    		  case 'C': iDezi[i] = 100; break;		
    		  case 'l':
    		  case 'L': iDezi[i] = 500; break;	
    		  case 'm':
    		  case 'M': iDezi[i] = 1000; break;	
    		}
    	}
    
      for(int i= 0; i<iZaehler; i++)
    	{
    	    ergebnis+=iDezi[i];
    
    		if(iDezi[i]<iDezi[i+1])
    		{
    		  ergebnis -= 2*iDezi[i];
    		}
    	}
      return ergebnis;
    }
    

    Bin noch ANfänger und kenn mich noch nicht so gut aus, wäre nett wenn ihr mir weiter helfen könntet.



  • Sieh mal genau hin, dein Prototyp stimmt nicht mit der Implementation der Funktion überein (der Typ muss char* sein, nicht char). Außerdem musst du nicht *ptr, sondern ptr übergeben. Und den Umweg über die Pointer-Variable kannst du dir sparen und stattdessen direkt cRoem übergeben.



  • Und das hier

    char cRoem[ARRAY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    

    kannst du auch einfach so schreiben:

    //so:
     char cRoem[ARRAY] = {0};
    
    //oder auch so:
     char cRoem[ARRAY] = {0,};
    

    Bewirkt dasselbe und schont die Finger. 😉



  • vielen Dank für die schnelle Hilfe



  • _matze schrieb:

    Und das hier

    char cRoem[ARRAY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    

    kannst du auch einfach so schreiben:

    //so:
     char cRoem[ARRAY] = {0};
    
    //oder auch so:
     char cRoem[ARRAY] = {0,};
    

    Bewirkt dasselbe und schont die Finger. 😉

    oder so:

    char cRoem[ARRAY] = {};
    


  • theta schrieb:

    _matze schrieb:

    Und das hier

    char cRoem[ARRAY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    

    kannst du auch einfach so schreiben:

    //so:
     char cRoem[ARRAY] = {0};
    
    //oder auch so:
     char cRoem[ARRAY] = {0,};
    

    Bewirkt dasselbe und schont die Finger. 😉

    oder so:

    char cRoem[ARRAY] = {};
    

    Oder so:

    char cRoem[ARRAY];
    memset(cRoem,0,sizeof(cRoem));
    

    🤡


Anmelden zum Antworten