C++ Link 2019 Eror + LNK 1120 Erro

SeanRenard

Cadet 4th Year
Registriert
Aug. 2015
Beiträge
87
Moin Leute :)
Und zwar habe ich folgenden Code geschrieben:

Tier.h:

Code:
#pragma once
#include <string>
#include <iostream>

using namespace std;
class CTier
{
protected:
	double Groesse;
	double Gewicht;
	string Name;

public:
	CTier(void);
	~CTier(void);

	double GetGrosse(void);
	double GetGewicht(void);
	string GetName(void);

	CTier(double ge, int g, string n);
	void SetGroesse(int g);
	void SetGewicht(double ge);
	void SetName(string n);
	void ZeigeDaten(void);
};

Tier.ccp:

Code:
#include "StdAfx.h"
#include "Tier.h"
#include <string>
#include <iostream>

using namespace std;


CTier::CTier(double ge, int g, string n)
{
	SetGroesse(g);
	SetGewicht(ge);
	SetName(n);
}


CTier::~CTier(void)
{
}


double CTier::GetGrosse(void)
{
	return Groesse;
}


double CTier::GetGewicht(void)
{
	return Gewicht;
}


string CTier::GetName(void)
{
	return Name;
}


void CTier::SetGroesse(int g)
{
	if (g > 3)
		Groesse=3;
	else if (g < 1)
		Groesse=1;
	else
		Groesse=g;

}


void CTier::SetGewicht(double ge)
{
	if (ge>10)
		Gewicht=10;
	else if (ge < 2)
		Gewicht =2;
	else
		Gewicht = ge;
}


void CTier::SetName(string n)
{
	if (n !="")
		Name = n;
	else
		Name = "Adelinda";
}




void CTier::ZeigeDaten(void)
{
	cout<<"\nDie Katze heisst: "<<Name<<" wiegt "<<Gewicht<<" und ist " <<Groesse<< " cm gross \n";
}

Ausgabe.ccp:

Code:
#include "stdafx.h"
#include <iostream>
#include <string>
#include "Tier.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	CTier T;
	T.SetGewicht(10);
	T.SetGroesse(2);
	T.SetName("Adelinda");
	T.ZeigeDaten();

	return 0;
}

Es wird bei mir jetzt ein Link 2019 Eror und LNK 1120 Error ausgegeben. WIeso? Was ist denn hier falsch?
Benutze Visual Studio 2010 professional... :(
 
Wenn ich jetzt raten müsste... Und meine c++ Tage sind schon etwas her, dann würde ich sagen du hast vergessen CTier() zu implementieren. Du hast nur CTier(double ge, int g, string n) implementiert.
 
SeanRenard schrieb:
Es wird bei mir jetzt ein Link 2019 Eror und LNK 1120 Error ausgegeben. WIeso? Was ist denn hier falsch?
Benutze Visual Studio 2010 professional... :(
Du hast Tier.cpp nicht im Projekt als zweiten Quelltext hinzugefügt?
 
SeanRenard schrieb:
Es wird bei mir jetzt ein Link 2019 Eror und LNK 1120 Error ausgegeben. WIeso? Was ist denn hier falsch?
Benutze Visual Studio 2010 professional... :(

Wie wär's mit der kompletten, wortgetreuen Fehlermeldung, wie Visual Studio sie dir ausgibt? Der wird garantiert auch die Symbole benennen, die der Linker nicht auflösen konnte.
 
blöderidiot schrieb:
Du hast Tier.cpp nicht im Projekt als zweiten Quelltext hinzugefügt?

Muss man das? O.o
Ergänzung ()

antred schrieb:
Wie wär's mit der kompletten, wortgetreuen Fehlermeldung, wie Visual Studio sie dir ausgibt? Der wird garantiert auch die Symbole benennen, die der Linker nicht auflösen konnte.

cfehler.PNG
 
Ja, du hast Recht.

@SeanRenard Mach aus
Code:
	CTier(void);
einfach
Code:
	CTier(void) { }
und fertig. Solche Triviakonstruktoren sollte man nicht in cpp-Dateien schreiben.

Gleiches gilt nebenbei auch für die ganzen Getter - für sowas gibt es Inline-Methoden. Und wenn der Destruktor nichts tut, lässt man ihn am besten ganz weg (es sei denn, er ist virtuell, aber der Fall taucht ohnehin nur bei Vererbung auf).

Edit: Sorge aber bitte dafür, dass die Member initialisiert werden, oder wirf den Standardkonstruktor ganz raus, wenn es keine sinnvollen Standardwerte gibt. Im Moment sieht mir die Klasse aber ohnehin etwas zu sehr nach JavaBean aus.
 
Zuletzt bearbeitet:
Dieses (void) Geschmarre in den Parameterlisten der Funktionen kannst du dir auch sparen. In C++ ist sowas nicht nötig. Wenn eine Funktion keine Argumente erwartet, dann nimm einfach leere Klammern und fertig. Also

void someFunction();
 
Zurück
Oben