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 |