Template mit Default Parameter mit Default Initialiserung in C++

Du schliesst einfach den Code in [code=cpp] ... [/code] Tags ein.

Gruß

C++:
#include "Param.h"

Param::Param(void)
{ 
	format();
}

Param::~Param(void)
{

}

CString Param::format(){
	CString res;
	switch (Type) {
		case Param::t_int:
			 res.Format("\t%i", i);
			 return res;
		case Param::t_float:
			 res.Format("\t%f", f);
			 return res;
		case Param::t_CString:
			 return ('\t' + str);
		default:
			// weiss ich noch nicht wie da std:: nicht geht
                                                // ("unknown type value");
			break;
	}
}

meine Header-Datei:

C++:
class Param 
{
	public:  
		Param(void);
		~Param(void);
		enum Type { t_int, t_float, t_CString }; 
	private:  
		Type type;
		union {int i;    
			   float f;  
		      };
		CString str;
	
	public:  
		Param(const CString& s) : type(t_CString), str(s) { }  
		Param(int i) : type(t_int), i(i) { }  
		Param(float f): type(t_float), f(f) { }
		CString format();
};

so will ich es dann aufrufen:

C++:
void abc(CString var1, Param var2 = Param(0), Param var3 = Param(0), Param var4 = Param(0), Param var5 = Param(0), Param var6 = Param(0), Param var7 = Param(0));

besser?

Danke für deine Hilfe


Gruss
 
C++:
#include "Param.h"

Param::Param(void)
{ 
	format();
}
Wozu soll dieser Standardkonstruktor gut sein? Wozu rufst du da die format Methode auf? Das macht doch überhaupt keinen Sinn, da du weder den Typ noch den Wert der anderen Attribute festgelegt hast. Außerdem wird der Rückgabewert der Methode auch gar nicht verwendet...
C++:
Param::~Param(void)
{
}
Ein leerer Destruktor ist nicht wirklich nützlich...
C++:
CString Param::format(){
	CString res;
	switch (Type) {
Es darf nicht Type heißen, Type ist ein Typ - an dieser Stelle muss eine Variable stehen.
C++:
		default:
			// weiss ich noch nicht wie da std:: nicht geht
                                                // ("unknown type value");
Für den Typ std::logic_error mußt du den Standard Header "stdexcept" einbinden.

C++:
class Param 
{
...
		CString format();
};
Die format Methode solltest du als const deklarieren:
C++:
CString format() const;

Gruß
 
Guten Morgen,
also ich habe mal deine Änderungen eingebracht.Danke dafür.
also so sieht es jetzt aus:
Header:
C++:
class Param 
{
	public:  
		enum Type { t_int, t_float, t_CString };
		
	private:  
		Type character;
		union {int i;    
			   float f; 
			  };
		CString str;
	
	public:  
		Param(const CString& s) : character(t_CString), str(s) { }  
		Param(int i) : character(t_int), i(i) { }  
		Param(float f): character(t_float), f(f) { }
		const CString format();
};

hier bringt er Fehler:
'Param' : 'class' type redefinition

Main sieht jetzt so aus:
C++:
#include "stdafx.h"
#include "Param.h"
#include <stdexcept>

CString Param::format(){
	CString res;
	switch (character) {
		case Param::t_int:
			 res.Format("\t%i", i);
			 return res;
		case Param::t_float:
			 res.Format("\t%f", f);
			 return res;
		case Param::t_CString:
			 return ('\t' + str);
		default:
			throw std::logic_error("unknown type value");
	}
}
jedoch bringt er Fehler, dass Param undefiniert wäre, character,t_int,i,t_float,f,i,str,CString nicht deklariert und teilweise nicht konstant.

Grüsse
 
Moin.
C++:
class Param 
{
		const CString format();
};
Nein, ich schrieb doch explizit:
C++:
CString format() const;

hier bringt er Fehler:
'Param' : 'class' type redefinition
Es scheint, du hast die Klasse Param aus irgendeinem Grund mehrfach definiert. Aus welchen Dateien besteht denn dein Projekt? Hast du den Header gegen mehrfach include's geschützt?

jedoch bringt er Fehler, dass Param undefiniert wäre, character,t_int,i,t_float,f,i,str,CString nicht deklariert und teilweise nicht konstant.
Das sind wahrscheinlich Folgefehler.

Gruß
 
Moin.Nein, ich schrieb doch explizit:
C++:
CString format() const;


Es scheint, du hast die Klasse Param aus irgendeinem Grund mehrfach definiert. Aus welchen Dateien besteht denn dein Projekt? Hast du den Header gegen mehrfach include's geschützt?


Das sind wahrscheinlich Folgefehler.

Gruß

Moin,
also mein Projekt besteht aus sehr vielen Dateien, wobei ich auf die Klasse Param nur in meiner Param.cpp ind Param.h und in einer cpp mit header, wo ich dann diese Klasse Param brauche zurückgreife. In der zweiten cpp und Header-Datei habe ich dann Param.h eingebunden.

Gruss
 

Neue Beiträge

Zurück