Vector
-
Hi !
Hab da ein Problem beim Auslesen eines Vectors... beim Debuggen wird mir auf vector ->
size_type size() const
{ // return length of sequence
return (_Myfirst == 0 ? 0 : _Mylast - _Myfirst);
}verwiesen ... ich kann mir diesen Fehler nicht erklären !
Bitte um Rat,
dankeschön
Pete
-
was war noch mal der fehler?
-
Es geht darum das ein Vector mit Zeigern auf dynamisch erstellte Objekte übergeben wird ... das funktioniert nur in einer anderen Funktion der Klasse kann ich jetzt auf den Vector (vect1) in CMixer::getData nicht zugreifen,weil dann die Fehlermeldung kommt,beim debuggen.
Ich habe den Fehler mit !!!!! gekennzeichnet
Dankeschön für die HilfeBye
Peter// iostream
// Beschreibung: Fügt die Kopfdatei ein,welche Ein- und Ausgabebefehle beinhaltet
#include <iostream>// string
// Beschreibung: Fügt die Kopfdatei für die Stringklasse ein
#include <string>// fstring
// Beschreibung: Fügt die Kopfdatei für die Filestringstreamklasse ein
#include <fstream>
#include "CController.h"// Cmixer.h
// Beschreibung: Fügt die eigene Kopfdatei "Cmixer.h" ein
#include "Cmixer.h"// vector
// Beschreibung: Fügt die Kopfdatei für die Vectorklasse ein
#include <vector>using namespace std;
//Konstruktor der Klasse Cmixer
// CMixer(void)
// Beschreibung: Konstruktor für die Klasse Cmixer
// input: void
CMixer::CMixer(void)
{}
//Destruktor der Klasse Cmixer
// ~CMixer(void)
// Beschreibung: Destructor für die Klasse CMixer
// input: void
CMixer::~CMixer(void)
{
}//Funktion der Klasse Cmixer
// double getData(TimeStep);
// Funktionsprototyp zur Initialisierung des Mixers
// input: double timestep
// output: double
double CMixer::getData(double timestep)
{
double result1;!!!!!!! Hier an dieser Stelle passiert der Fehler
cout<<vect1->size();
//cout<<help4->getfileheader();return result1=1;
}//Funktion der Klasse Cmixer
// int setSignals(vector<CWavegenerator*>& vect);
// Funktionsprototyp zur Setzen der Signalwerte im Mixer
// input: vector(enthält Objecte als Zeiger)
// output: intvoid CMixer::setSignals(vector <CWavegenerator*> &ivect)
{
vect1=&ivect;
/*
CWavegenerator *abb;
abb=vect1->at(0);
cout<<abb->getfileheader();
cout<<vect1->size();
*/Das Witzige ist das vect1 hier funktioniert !
}
-
Hab grad gesehen es tritt auch ein Warning auf
C4267: 'argument' : conversion from 'size_t' to 'unsigned int', possible loss of data
-
ok, dann habm wir jetzt eijn stück vom code und die warning die noch zusätzlich kommt, aber immer noch keine fehlermelung
-
Ich denke du meinst folgendes ..
Unhandled exception at 0x0042c696 in Project5.exe: 0xC0000005: Access violation reading location 0xccccccd0.
-
Oje hab ich nicht dazugeschrieben ... beim Complieren passt alles !
Keine Fehlermeldung .. !
-
wurde vect1 jemals instanziert?
unten wurde as ja an die funktion übergeben, aber oben?? ich seh da nigends ein new
-
vect1 is in der header instanziert
#ifndef __CMIXERCLASS
#define __CMIXERCLASS//EINFÜGEN DER KOPFDATEIEN
// iostream
// Beschreibung: Fügt die Kopfdatei ein,welche Ein- und Ausgabebefehle beinhaltet
#include <iostream>// string
// Beschreibung: Fügt die Kopfdatei für die Stringklasse ein
#include <string>// fstring
// Beschreibung: Fügt die Kopfdatei für die Filestringstreamklasse ein
#include <fstream>// fstring
// Beschreibung: Fügt die Kopfdatei für die Vectorklasse ein
#include <vector>using namespace std;
//KLASSENDEFINITION
// Name: CMixer
// Beschreibung: Diese Klasse bietet die Möglichkeit zur Beschreibung
// eines digitalen Mixersclass CMixer
{//ZUGRIFFSKONTROLLE
// private und public sind Methoden zur Zugriffskontrolle auf Daten und Methoden// private: Zugriff nur innerhalb der Klasse möglich
private:!!!!!!!!! vector <CWavegenerator*> *vect1;
// public: Zugriff auch von ausserhalb möglich
public:CMixer(void); // Konstruktor
~CMixer(void); // Destructor//Funktion der Klasse Cmixer
// double getData(TimeStep);
// Funktionsprototyp zur Initialisierung des Mixers
// input: double timestep
// output: double
double getData(double timestep);//Funktion der Klasse Cmixer
// int setSignals(vector<CWavegenerator*>& vect);
// Funktionsprototyp zur Setzen der Signalwerte im Mixer
// input: vector(enthält Objecte als Zeiger)
// output: int
void setSignals(vector<CWavegenerator*> &ivect);
};
#endif
-
bitte verwende die code-tags
und nö, das ist nicht intialisiert.
vector <CWavegenerator*> *vect1;
Ich seh da ne definition eines zeigers, der irgendwo ins nirvana zeigt (auf 0xccccccd0 um genau zu sein)
-
CMixer::setSignals(vector <CWavegenerator*> &ivect) { vect1=&ivect; /* CWavegenerator *abb; abb=vect1->at(0); cout<<abb->getfileheader(); cout<<vect1->size(); */ Das Witzige ist das vect1 hier funktioniert ! }
Ich instanziere doch in setSignals, und warum funktioniert vect1 in der Funktion setSignals ?
Danke
Peter
-
und du rufst setSignals auch auf vor getData? und der vector ist noch gülig?
also net so was:CMixer mixer; int main() { init(); doit(); return 0; } void inti() { vector<CWavegenerator*> vec; ... mixer.setSignals(vec); } void doit() { mixer.getData(); // <--- BOOM, den vector von oben gibts nimmer, war ein //lokales obejct in init() }
-
Reihenfolge stimmt!
Ich übergebe den Vector an die Funktion SetSignals->setzte damit Vect1,der in der Klasse CMixer deklariert ist,und möchte ihn nun in der Funktion getData aufrufen,da kommt dann der Debug.
-
Ok, jetzt hab ichs, habs jetzt etwas anders gelöst
Lese jetzt den Vektor ober den Konstruktor ein und setzt damit den Vektor,so funktionierts,weiss zwar nicht warum so und anders nicht aber es funktioniert.Ok Dankeschöne vielmals dass ich dich da nerven hab dürfen .. *g*,hat mir sehr geholfen.
by Peter