Verstehe Fehler C4715 nicht



  • Hallo!
    Ich soll eine Funktion schreiben die das Argument prüft, ob es eine Primzahl ist. Das selbe Konzept habe ich bereits als Teil des Hauptprogramms erfolgreich getestet.
    Als Funktion mit bool-Ausgabe bekomme ich nun o.g. Fehler in der letzten Zeile - "nicht alle Steuerelementpfade geben einen Wert zurück". Das verstehe ich aber leider nicht und bin daher über Hilfe erfreut!

    bool _istPrim (int n){
    	int i=2;
    
    	if ((n%2)!=0){
    		double m = n, imax = sqrt (m);
    		while (i<=imax)
    		{
    			if (((n%i)==0))
    			{
    				if(i==m){
    					return 1;
    					break;}
    
    				else{
    					return 0;
    					break;}
    			}
    			else{
    			i++;
    			}
    		};
    
    	if(i>imax){
    		return 1;
    		}
    	}
    	else {
    		if(n==2){
    			return 1;
    		}else{
    			return 0;
    		}
    	}
    }
    


  • Was gibt die Funktion zurück wenn ((n%2)!=0) wahr ist und dann i<=imax ist?
    Also wenn die Bedingung in Zeile 23 unwahr ergibt?



  • DirkB schrieb:

    Was gibt die Funktion zurück wenn ((n%2)!=0) wahr ist und dann i<=imax ist?
    Also wenn die Bedingung in Zeile 23 unwahr ergibt?

    Das else in Z27 war falsch zugeordnet, es gehört natürlich zu dem direkt vorherstehenden if. Also habe ich in Z26 eine Klammer gelöscht und am Ende eine geschlossene Klammer hinzu gefügt. Leider läuft es immer noch nicht. Jetzt kommt außerdem noch der Fehler lnk 1169 - mindestens ein mehrfach definiertes Symbol gefunden ... 😕



  • Der Linker sollte aber mitteilen, wie das Symbol heißt.
    Da musst du dann ansetzen.

    Symbole mit einem _ am Anfang sind dem Compiler vorbehalten.



  • DirkB schrieb:

    Der Linker sollte aber mitteilen, wie das Symbol heißt.
    Da musst du dann ansetzen.

    Symbole mit einem _ am Anfang sind dem Compiler vorbehalten.

    Das tut er aber nicht, ein Doppelklick auf die Fehleranzeige führt auch nicht wie sonst in die betreffende Zeile. Ich nutze MS Visual Studio, habe aber sehr wenig Erfahrung im Umgang damit. Deswegen würde ich mich freuen wenn mir jemand sagen kann, wie ich dieses "fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden." beheben kann...



  • Der Linker kann die Zeilennummer auch nicht kennen, da der damit nichts mehr zu tun hat.
    Erst werden die .c Datein vom Preprozessor ausgewertet, dann vom Compiler. Der macht daruas Object-Dateien.
    Diese Object-Dateien werden dann vom Linker mit den Bibliotheken zusammengebunden.
    Daraus ensteht dann die .exe

    Irgendein Bezeichner (Variablenname, Funktionsname) kommt in deinem Code doppelt vor und der Linker kann das nicht auflösen.

    Ohne Quelltext kann dir da niemand helfen.

    Hast du schon die _ vor deinen Bezeichnern entfernt?



  • JOberst schrieb:

    DirkB schrieb:

    Was gibt die Funktion zurück wenn ((n%2)!=0) wahr ist und dann i<=imax ist?
    Also wenn die Bedingung in Zeile 23 unwahr ergibt?

    Das else in Z27 war falsch zugeordnet, es gehört natürlich zu dem direkt vorherstehenden if. Also habe ich in Z26 eine Klammer gelöscht und am Ende eine geschlossene Klammer hinzu gefügt. Leider läuft es immer noch nicht. Jetzt kommt außerdem noch der Fehler lnk 1169 - mindestens ein mehrfach definiertes Symbol gefunden ... 😕

    Das mehrfach definierte Symbol lässt sich nicht in diesem Codeausschnitt finden. Das andere Problem

    warning C4715: "_istPrim": Nicht alle Steuerelementpfade geben einen Wert zurück.
    

    ist auch mit der Änderung nicht gelöst.


Anmelden zum Antworten