C++ error: ld returned 1 exit status taucht plötzlich auf

Leberkäse

Cadet 3rd Year
Registriert
Juni 2014
Beiträge
36
Servus,
Ich bin wiedermal ratlos. Ich versuche gerade ein Programm zu schreiben (Inhalt vorerst egal und zu lang;)).
Weil ich zwei Klassen benötigte, die das selbe machen nur mit verschiedenen Datentypen habe ich eine Klasse mithilfe von Templates erstellt um das ganze effizienter und weniger Fehleranfällig zu machen.
Vor dieser Implementierung hat alles einwandfrei funktioniert. Allerdings bekomme ich nun nach dem kompilieren die im Titel beschriebene Fehlermeldung ohne zusätzliche Hinweise.
Ich weiß, dass das bedeutet, dass der Linker "nicht mehr weiß was er machen soll", allerdings habe ich keine Ahnung woher das kommen sollte.
Außerdem läuft keine vorherig compilierte Version im Hintergrund, andere Programme kann ich Problemlos ausführen und mit der Festplatte ist alles in Ordnung.
Laut anderen Forenbeiträgen wäre die letze verbleibende Möglichkeit, dass der Linker eine oder mehrere Symbole, die er verbinden sollte nicht finden kann (Also ein Fehler im Code). Da vorhin alles einwandfrei funktioniert hat kann ich mir aber nicht vorstellen, dass es daran liegt. Wenn ich den Debugger über der main Datei laufen lasse kommt die Fehlermeldung schon ab der ersten Zeile.
Irgendjemand Erfahrungen oder typische Fehler?

Mfg
 
Zuletzt bearbeitet:
Na zu aller erst solltest du deine Template-Klasse mal auskommentieren und sehen, dass dann wieder alles läuft. Zur Not noch clean&rebuild des Projets/Solution.
Danach halt ein Minimalbeispiel der Template-Klasse wieder reinnehmen und selbst durchwühlen oder hier posten und helfen lassen.
 
Das ist ja das was mich verrückt macht. Ich hab ja schon nahezu alles auskommentiert, auch bevor der Fehler überhaupt aufgetreten ist und bekomme den Fehler immer noch:(
Ergänzung ()

und hier posten wird schwierig. Ich kann mir kaum vorstellen, dass sich jetzt jemand 650 Zeilen Code durchliest
Ergänzung ()

Ok ich konnte es jetzt eingrenzen hier der Code:

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <cstdio>
#include "Brenner.h"
#include "WinAdapt.h"
#include <string>
#include <cstring>

int As=4;
using namespace std;

Brenner::Brenner(const string Name, Kessel* Kess, int X, int Y)
{
Brenner::name = Name;
Brenner::XKoord=X;
Brenner::YKoord=Y;
Brenner::Kess=Kess;
Brenner::LiterVerbraucht = 0.0;
}


void Brenner::Spritzzufuhr(double Menge)
{
LiterVerbraucht+=Menge;
double Ezu= Menge*38.3e3;
Kess->Waermezufuhr(Ezu);
}

void Brenner::Show()
{ int b = (Kess->Breite*3)/4;
int h = (Kess->Hoehe)/4;
char* N=new char[name.length()+1];
std::strcpy (N,name.c_str());
char txtbuf[128];

if(h<60)
{
h=60;
}
if(XKoord<0||YKoord<0)
{
XKoord = Kess->XKoord;
YKoord = Kess->YKoord+Kess->Hoehe;
}
Rect(XKoord, YKoord, XKoord+b, YKoord+h);
Text(XKoord+10,YKoord+10,N);
sprintf(txtbuf, "%f Liter", LiterVerbraucht);
Text(XKoord+10, YKoord+30,txtbuf);
}

bool Brenner::contains(int X, int Y){
int b = (Kess->Breite*3)/4;
int h = (Kess->Hoehe)/4;

if(X>=XKoord && X<=XKoord+b && Y<=YKoord+h && Y>=YKoord)
{
return true;
}
else
return false;
}
Ergänzung ()

Ok hab den Fehler, anscheinend hatte der Compiler ein Problem mit dem int As=4 und
using namespace std. keine Ahnung warum.
 
Mit welchem Compiler compilierst du denn? Und wie genau wird der aufgerufen?

Und ist "ld returned 1 exit status" die einzige Fehlermeldung? Das deutet normalerweise auf ein nicht gefundenes Symbol hin, das taucht dann aber üblicherweise nochmal als eindeutigere Fehlermeldung auf
 
Das int As wird es nicht sein, eher das <string.h> und<cstring>, da hast du ne Menge Symbole übereinander definiert. Auch bei <stdio.h> und <cstdio>. Jeweils eins davon ist ausreichend, die <c...> Variante definiert alles in std::, die <..h> Variante alles in :: (also im Root-Namespace).

Mach mal bei deinem Compiler die Warnungen an, da sollte dann ne Meldung kommen (-Wall bei GCC, /W4 bei VS).
 
@Hacock: Du hast Recht, dss beides unnötig ist, aber deine Erläuterung des Unterschieds ist falsch.

Code:
using namespacename;

mapped auf den aktuellen Namespace.

Der wahre Unterschied ist einfach, dass es einfach nur verschiedene Methoden zum Includen sind, wobei die nicht-".h"-Variante für C++ gedacht ist und die ".h"-Variante für C gedacht ist.

EIGENTLICH sollte man keines der beiden verwenden, da es für C++ eigentlich <string> gibt, und man damit eigentlich ziemlich weit kommt. (Daher einfach das include <string.h> rauslöschen.


Quelle: https://stackoverflow.com/questions/8380805/difference-between-string-h-and-cstring
 
Zurück
Oben