Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » dynamisches array problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
14.06.2005, 10:14 Uhr
~keine ahnung
Gast


hallo ich habe meinen code auf ein dynamisches array umgestellt. ich hab afxtempl.h included und dann folgende sachen verändert:

von double myarray[50000]; zu CArray<double> myarray;
von myarray[count] = RetTime/1000; zu
myarray[count] = myarray.Add(RetTime/1000);

das ganze wird dann in einer anderen klasse in eine listbox geschrieben - dazu habe ich folgende sachen verändert:

res.m_pArray = myarray; zu res.m_pArray = &myarray;
und in der header der anderen klasse:
double *m_pArray; zu CArray<double> *m_pArray;

beim kompilieren bekomme ich keine fehler aber wenn ich mein programm jetzt ausführe steht in meiner listbox nur noch mist drin - also viele nuller, komische zeichen, zwischendurch mal sowas 1684984464646445654.

wo muss ich denn das afxtempl includen? ich habs in der datei wo myarray erzeugt wird included sowie in der header wo m_pArray steht, in der klasse wo m_pArray die listbox füllt und in der hauptdatei meines programms.

hier nochmal mein kompletter code - aber wie gesagt mit dem statischen array funktioniert es einwandfrei.

void PeakView::OnPeakDialog()
{
// TODO: Add your command handler code here



PeakDlg dlg;
PeakResult res;


if(dlg.DoModal() == IDOK)
{
// UpdateData(TRUE);

PeakDoc* pDoc = GetDocument();
CRecChrogrm rs(NULL);
int nCounts = CChrtgrGlobal::getIgnoredCounts();
CString csCounts;
csCounts.Format("%i",nCounts);

rs.Open(CRecordset::snapshot,
"SELECT scan, rettime, sum(intens) from " +
CChrtgrGlobal::getTitle() + " WHERE mz > " + dlg.m_strMZStart + " AND mz < " +
dlg.m_strMZEnd + " AND INTENS > " + csCounts +
" GROUP BY SCAN ORDER BY SCAN;",NULL);

CChroData *c = new CChroData(&rs);
pDoc->Chromy=c;


pDoc->UpdateAllViews(NULL);





int arraysize = pDoc->Chromy->getMaxScan();
CArray<double> myarray;//double myarray[50000]; //dynamic array
double Intens1 = 0;
double Intens2 = 0;
double RetTime = 0;
//double MindestIntens = 0;
//int Callback = 0;
int count = 0;
int count2 = 0;
int Peakweite = 0;
double Bezugspunkt = 0;
double MinToleranz=0;
double MinToleranz2=0;
int Bezugsintervall= 60;
for (int i =30; i< Bezugsintervall; i++)
{
Bezugspunkt = Bezugspunkt + pDoc->Chromy->getPoint(i).y;
}
Bezugspunkt = Bezugspunkt/30;
MinToleranz=Bezugspunkt-(Bezugspunkt*dlg.Abweichung/100);
MinToleranz2=Bezugspunkt+(Bezugspunkt*dlg.Abweichung/100);


/////// hier switch/case

switch(dlg.m_iOption)
{ // open klammer von switch/case
case 0:



for (int i = 0; i < arraysize-1; i++)
{

Intens1 = pDoc->Chromy->getPoint(i).y;
Intens2 = pDoc->Chromy->getPoint(i+1).y;
RetTime = pDoc->Chromy->getPoint(i).x;



if (Intens1<MinToleranz)
{
count2++;

if (Intens2>Intens1)
{
Peakweite = count2;

if (Peakweite>dlg.Scanweite)
{

myarray[count] = myarray.Add(RetTime/1000);
count++;

}
}
}
}


break;

case 1:


for (int i = 0; i < arraysize-1; i++)
{

Intens1 = pDoc->Chromy->getPoint(i).y;
Intens2 = pDoc->Chromy->getPoint(i+1).y;
RetTime = pDoc->Chromy->getPoint(i).x;



if (Intens1>MinToleranz2)
{
count2++;

if (Intens2<Intens1)
{
Peakweite = count2;

if (Peakweite>dlg.Scanweite)
{

myarray[count] = RetTime/1000; // myarray.Add(RetTime/1000)
count++;

}
}
}
}





break;

} // schließklammer von switch/case

// hier ende von switch/case

//pointer auf variablen für die PeakResult klasse
res.m_pArray = &myarray; // dynamic array &myarray;
res.m_nArraySize = count;

// öffnen des result fensters
res.DoModal();
}

}


hier das zeug wo listbox gefüllt wird:

BOOL PeakResult::OnInitDialog()
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here


for (int i = 0; i < m_nArraySize; i++)
{
CString s;
s.Format("%.1f", m_pArray[i]);
m_ctrlListBox.AddString(s);
}



return TRUE;

}


und noch die header zeilen:

public:

CListBox m_ctrlListBox;
virtual BOOL OnInitDialog();


CArray<double> *m_pArray;
int m_nArraySize;

sorry für den langen post aber das ganze regt mich langsam wirklich auf und ich weiß beim besten willen nicht wo der fehler sein kann.

danke schonmal für eure hilfe mfg patrick
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.06.2005, 10:30 Uhr
GuenniAtWork



Hi,

CArray ist anders definiert.

CArray<TYPE,ARG_TYPE>

TYPE
Template parameter specifying the type of objects stored in the array. TYPE is a parameter that is returned by CArray.
ARG_TYPE
Template parameter specifying the argument type used to access objects stored in the array. Often a reference to TYPE. ARG_TYPE is a parameter that is passed to CArray.

Und was ist das?

Zitat:

myarray[count] = myarray.Add(RetTime/1000);



Das sieht sehr komisch aus.
--
Gruß GuenniAtWork

Dieser Post wurde am 14.06.2005 um 10:34 Uhr von GuenniAtWork editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.06.2005, 10:38 Uhr
~keine ahnung
Gast


hmmm also anders definiert - und was heißt das in meinem fall? ich kann damit nichts anfangen.

also myarray[count] = RetTime/1000; geht ja

myarray[count] = myarray.Add(RetTime/1000); ist mir hier im forum gesagt worden - keine ahnung ob das stimmt. einen kompilerfehler bekomme ich wie gesagt nicht. wie würde das denn deiner meinung nach gehen?

mfg patrick
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.06.2005, 11:00 Uhr
GuenniAtWork



Das array müßte dann so aussehen:


C++:
CArray<double,&double> myarray;



Was Willst Du denn mit dieser Zuweisung bezwecken?

Du schreibst in das Array an der Stelle count den Index des letzten elements (das was mit Add hinzugefügt wird)?
Was soll das bringen?

CArray.Add hat den Index des hinzugefügten Elements als Rückgabewert.

Zitat von MSDN:

CArray::Add
int Add( ARG_TYPE newElement );
throw( CMemoryException );

Return Value

The index of the added element.




Also ich vermute mal, dass Du den Wert aus RetTime/1000 in das Array an Stelle count einfügen willst.


C++:
//Entweder
myarray[count] = RetTime/1000;
//Oder (besser!!)
myarray.SetAtGrow(count,RetTime/1000);



Oder willst Du was anderes bezwecken?
--
Gruß GuenniAtWork
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.06.2005, 11:16 Uhr
~keine ahnung
Gast


also bezwecken will ich das an der stelle count der x wert geholt und geschrieben wird zu dem y wert den ich mit den if/else anweisungen finde.

"//Entweder
myarray[count] = RetTime/1000;
//Oder (besser!!)
myarray.SetAtGrow(count,RetTime/1000);"

hab ich beides ausprobiert und bringt keinen kompilerfehler aber die komischen sachen in der listbox sind die selben wenn ich das programm ausführe.


wenn ich CArray<double,&double> myarray; schreibe bekomm ich 1000 kompilerfehler.

kannst du mir vielleicht alle änderungen nochmal für dumme aufschreiben -bitte.

mfg patrick
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
14.06.2005, 11:32 Uhr
GuenniAtWork



Kannst Du den Code bitte Nochmal Posten, aber mit '[cpp]' Formatierung?

Bei dem ersten sehe ich nicht durch
--
Gruß GuenniAtWork

Dieser Post wurde am 14.06.2005 um 11:37 Uhr von GuenniAtWork editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
14.06.2005, 11:37 Uhr
~keine ahnung
Gast


ich hoffe du bekommst jetzt keinen schreianfall aber was meinst du mit
"'[cpp] [\cpp]' Formatierung" und welche teile brauchst du alle?

mein codename ist nicht umsonst keine ahnung - ich hab wirklich keine *G*

mfg patrick
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
14.06.2005, 11:44 Uhr
GuenniAtWork



Formatierung:

C++:
//das hab ich gemeint
//steht Links, wenn Du was Schreibst!!!




Alles wo Du glaubst es ist der Wurm drin.
--
Gruß GuenniAtWork

Dieser Post wurde am 14.06.2005 um 11:45 Uhr von GuenniAtWork editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.06.2005, 11:52 Uhr
~keine ahnung
Gast


also dann probier ich das mal aus:
CArray<double> myarray;


for (int i = 0; i < arraysize-1; i++)
{

Intens1 = pDoc->Chromy->getPoint(i).y;
Intens2 = pDoc->Chromy->getPoint(i+1).y;
RetTime = pDoc->Chromy->getPoint(i).x;



if (Intens1<MinToleranz)
{
count2++;

if (Intens2>Intens1)
{
Peakweite = count2;

if (Peakweite>dlg.Scanweite)
{

myarray[count] = myarray.Add(RetTime/1000);
count++;

}
}
}
}



res.m_pArray = &myarray;

header: CArray<double> *m_pArray;

das sind alle sachen die ich verändert habe.




mfg patrick
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
14.06.2005, 11:59 Uhr
GuenniAtWork



Haste mal schrittweise ausführen lassen und n pa Werte überprüft?
Vieleicht simmt was bei der Übergabe nicht?
--
Gruß GuenniAtWork
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: