Improper use of typedef und Function call missing

Hallo,

ich möchte bei der Implementierung einer Methode vom cpp-file aus auf die Ergebnisse von anderen, ebenfalls dort implementierten Methoden zugreifen. Dazu muß ich, wenn ich nicht irre, ein Objekt meiner Klasse als Parameter bypassen und diesen Bypass sowohl im .h-File als auch im Main deklarieren, nicht? Trotzdem klappt es nicht:

// „TVector2.h“:
class TVector2 {
float *vec;
int cantcomp;

public:
TVector2(int n=0);
~TVector2();
TVector2(const TVector2 &amp:wink:;
void Leer();
float MediaGeo();
float CompMay();
float CompMen();
float Rango(TVector2 a);
};

// TVector2.cpp :
//---------------------------------------------------------------------------

#pragma hdrstop

#include „TVector2.h“
#include
#include

//---------------------------------------------------------------------------

#pragma package(smart_init)

TVector2::TVector2(int n){ // Constructor
cantcomp = n;
vec = new float[cantcomp];
for (int i=0; i> vec[i];
}
}

float TVector2::MediaGeo() {
float medg=1;
for (int i=0; i vec[i])
mencomp=vec[i];
return mencomp;
}

float TVector2::Rango(TVector2 a){
float range=0;
range = (a.CompMay() - a.CompMen());
return range;
}

// Main.cpp :

//---------------------------------------------------------------------------

#include
#pragma hdrstop
#include „TVector2.h“
#include

//---------------------------------------------------------------------------

#pragma argsused

int main(int argc, char* argv[])
{
int cantcomp=0;
cout > cantcomp;

TVector2 v(cantcomp);
cout

Hallo Uwe,

cout

Hallo, Danke für die Antwort.

Du musst hier ‚v.Tango(a)‘ aufrufen und das ‚TVector2‘
weglassen.

Wenn ich DAS tue, kommt die Fehlermeldung „undefined symbol ‚a‘“…
Das kann’s also nicht sein.

Übrigens nur nebenbei: Hast du dir über Division
durch 0 Gedanken gemacht bei der Berechnung deiner Mittel?

Äh, ja, dachte ich. Deshalb initiiere ich
float medg=1;
in der Implementation der Methode in TVector2.cpp

Irgendwas hakt, ich weiß bloß nicht, was…

Gruß, Uwe

Hallo

Lange her, dass ich in C/C++ was gemacht habe, aberkann es sein, dass du deinen TVector2 a nie erzeugst?

v.CompMen()

Hallo Uwe,

Irgendwas hakt, ich weiß bloß nicht, was…

Ich habs mal ein wenig aufgeräumt (hatte gerade keine
Lust, was vernünftiges zu machen :wink: Ich denke, Du
wurstelst Dich durch. Ich habe die Borland-spezifischen
Sachen rausgenommen, aber vielleicht kompiliert das
bei Dir sogar ohne diese. Ich hoffe, der Borland-Compiler
unterstützt die aktuelle Include-Deklaration der Header.

TVector2.h

class TVector2 {
 float \*vec;
 int cantcomp;
public:
 TVector2(int n=0);
 TVector2(const TVector2 &amp:wink:;
 ~TVector2();
 int Count () const { return cantcomp; }
 void Set (float value, int index) { vec[index] = value; }
 float Get (int index) const { return vec[index]; }
 float MediaGeo () const;
 float CompMay () const;
 float CompMen () const;
 float Rango () const { return CompMay() - CompMen(); }
};

TVector2.cpp

#include "TVector2.h"
#include 
#include 
#include 
#include 

TVector2::TVector2(int n) : cantcomp(n) { // Constructor
 vec = new float[Count()]; assert(vec != 0);
 memset( vec, 0, sizeof(\*vec) \* Count() );
}

TVector2::~TVector2() { // Destructor
 delete [] vec;
}

TVector2::TVector2(const TVector2& tv) { 
 cantcomp = tv.Count();
 vec = new float[Count()]; assert(vec != 0);
 memcpy( vec, tv.vec, sizeof(\*vec) \* Count() );
}

float TVector2::MediaGeo() const {
 float medg = 1.f;
 for (int i=0; i vec[i] ) mencomp = vec[i];
 return mencomp;
}

Main.cpp

#include "TVector2.h"
#include 
#include 

 void Leer(TVector2& v) 
{
 for (int i=0; i\> value; 
 v.Set(value, i);
 }
}

 int main(int argc, char\* argv[])
{
 int cantcomp=0;
 using namespace std;
 
 cout \> cantcomp;

 TVector2 v(cantcomp);
 cout 
Grüße

CMБ
1 Like

Mein Dank allen Geantwortethabenden! (owT)
.