Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
constructor problem

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Peter
Gast





BeitragVerfasst am: 10. Feb 2002 23:05   Titel: constructor problem

Hi,

ich habe folgendes Probelem:

In meinem Programm gibt es einen Constructor der class Variablenloesung, der einen vector<int> als Parameter nimmt... So, da man, wenn man derartige Klassen als membervariablen nimmt, wohl einen "leer" () Construktor braucht, habe ich folgendes entwickelt:

<code>
Variablenloesung::Variablenloesung()
{
vector<int> tmp(3,0);
Variablenloesung(tmp);
}
</code>

Wie gesagt, Variablenloesung(vector<int>) gibt es.... sollte also grad den anderen construcor aufrufen, klappt aber nicht :

g++ -Wall -ggdb -c variablenloesung.cpp
variablenloesung.cpp: In method `Variablenloesung::Variablenloesung()':
variablenloesung.cpp:15: conflicting types for `class Variablenloesung tmp'
variablenloesung.cpp:14: previous declaration as `class vector<int,allocator<int> > tmp'
make: *** [variablenloesung.o] Error 1


Wer kann mir helfen ? (Bitte nicht erklaeren wie shice doch C++ ist Wolfgang Smile )
 

heinrich



Anmeldungsdatum: 22.09.1999
Beiträge: 219
Wohnort: N49.137 E8.544

BeitragVerfasst am: 11. Feb 2002 0:09   Titel: Re: constructor problem

so etwas ?

code:

/* Erfolgreich Kompiliert unter
Microsoft Windows:
GNU gcc version 2.95.3-5 (cygwin special)
Microsoft 32-Bit C/C++-Compiler Version 12.00.8168 fuer x86
Linux:
GNU gcc version 2.95.3 20010315 (SuSE)
FreeBSD:
GNU gcc version 2.95.3
*/

#include <iostream>
#include <vector>

/*
* eigener namespace fuer Peter's Klasse(n)
*/
namespace Peter {

class Variablenloesung
{
public:

Variablenloesung()
: m_vector( std::vector<int>(3,0) )
{
// nothing to do
};

Variablenloesung( std::vector<int> v )
{
// do something
} ;

~Variablenloesung() { } ;

private:
std::vector<int> m_vector;

};

/*
* oder doch vielleicht eher mit einem Template ?
*/

template<class T>
class Variablenloesung2
{
public:

Variablenloesung2()
: m_vector( std::vector<T>(3,0) )
{
// nothing to do
};

Variablenloesung2( std::vector<int> v )
{
// do something
} ;

~Variablenloesung2() { } ;

private:
std::vector<T> m_vector;

};

} // end: namespace Peter

int main(int argc, char** argv)
{
std::cout << "try to create some instances..." << std::endl;

Peter::Variablenloesung var1;
Peter::Variablenloesung2<int> var2;
Peter::Variablenloesung2<char> var3;
Peter::Variablenloesung2<float> var4;

std::cout << "done." << std::endl;

return 0;
}


_________________
It just works.
 
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name

Peter
Gast





BeitragVerfasst am: 11. Feb 2002 1:27   Titel: Re: constructor problem

grml, ich raffs net :)

1. Was ist an meinem Code da oben falsch ??
2. Was bedeutet (In deinem code) :
Variablenloesung()
: m_vector( std::vector<int>(3,0) ) ??

der Einfache : ist doch für vererbung oder ?
denn hab ich bisher nur oben bei classen verwendet (class Quader:Rechteck...)

Peter <-- bittet um Erklaerung Smile
 

arni



Anmeldungsdatum: 10.02.2002
Beiträge: 73
Wohnort: Berlin

BeitragVerfasst am: 11. Feb 2002 2:03   Titel: Re: constructor problem

Wenn du das Objekt nicht auf dem Heap anlegen willst ("new"), musst Du bei Templates die Initialisierung innerhalb der Konstruktor-Initialisiererliste vornehmen. das ":" leitet diese Liste ein. C++ ist halt eine komische Sprache steht das ":" nach dem Klassennamen bedeutet es "erbt von". Steht das ":" nach dem Methodenkopf des Konstruktors bedeutet es "initialisiere dieses hier".

code:

#include <stdlib.h>
#include <stdio.h>
#include <assert.h>

template <class T> class vector
{
public:
vector(int size) { _v = (T*)calloc (size, sizeof(T));_size=size;}
virtual ~vector(){ free(_v);}
T operator[](int i)const { assert (i<_size); return _v; }
T& operator[](int i) { assert (i<_size); return _v; }

private:
T* _v;
int _size;
};


class zahlen
{
public:
zahlen (int size): _v(size) {}
virtual ~zahlen(){}

void set (int idx, int value){ _v[idx]=value;}
int get (int idx){ return _v[idx]; }
private:
vector<int>_v;

};

int main()
{
zahlen z(2);
z.set (0,10);
printf ("%d",z.get(0));
return 0;
}



Zuletzt bearbeitet von arni am 11. Feb 2002 2:03, insgesamt 3-mal bearbeitet
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Peter
Gast





BeitragVerfasst am: 11. Feb 2002 15:33   Titel: Re: constructor problem

grml :)

Und warum geht jetzt mein Code nicht ? Ist doch logisch ?? Was auf jeden Fall auch funktioniert, ist

Klasse::Klasse(string)
{
hier steht was;
}

Klasse::Klasse()
{
Klasse("ruf anderen auf");
}


Dass geht, aber wenn ich vorhere nen string mache, und den übergebe, dann gehts nimmer.

Erklaert mal bitte....

Peter
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy