Die letzten 10 Beiträge |
eulerscheZahl |
Jetzt aber:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
|
CMeasSeries::CMeasSeries(string baseUnit, int maxValues)
{
if(maxValues > 0)
{
m_maxValues = maxValues;
m_baseUnit = baseUnit;
}
else
{
m_baseUnit = "";
maxValues = 10;
}
m_curValues = 0;
m_values = new CMeasValue[m_maxValues]; //Speicherreservierung
}
CMeasSeries::~CMeasSeries()
{
delete[] m_values; //Speicherfreigabe
}
bool CMeasSeries::put(double value, int exp, string baseUnit)
{
if(m_curValues < m_maxValues)
{
m_values[m_curValues++] = CMeasValue(value, exp, baseUnit);
return true;
}
return false;
} |
|
|
eulerscheZahl |
Nein, kein double:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
|
CMeasSeries::CMeasSeries(string baseUnit, int maxValues)
{
if(maxValues > 0)
{
m_maxValues = maxValues;
m_baseUnit = baseUnit;
}
else
{
m_baseUnit = "";
maxValues = 10;
}
m_curValues = 0;
m_values = (CMeasValue*)malloc(m_maxValues * sizeof(CMeasValue));
}
CMeasSeries::~CMeasSeries()
{
free(m_values);
}
bool CMeasSeries::put(double value, int exp, string baseUnit)
{
if(m_curValues < m_maxValues)
{
cout << "m_values = " << m_values << endl;
cout << "m_values + m_curValues = " << m_values + m_curValues << endl;
cout << "m_values + 1 = " << &m_values[1] << endl;
m_values[m_curValues] = CMeasValue(value, exp, baseUnit);
cout << "didIt\n";
m_curValues++;
return true;
}
return false;
} |
|
Aber das funktioniert nicht.
Naja, vielleicht später, ich bin jetzt erst mal weg. |
Jassy |
Meinst du es so euler:
Du brauchst auf jeden Fall einen Zeiger vom Typ CMeasValue (dann hat ein Objekt auch die Größe von 16 Byte, keine 8 wie bei double).
double *m_valueCMeasValue = new double;
müsste ich danach den Speicher nicht initialiesieren ?
So:
double * m_valueCMeasValue = new double[]; |
eulerscheZahl |
Die Ausgabe wird etwa so gehen:
code: |
1:
2:
3:
4:
5:
|
void CMeasSeries::print()
{
for(int i = 0; i < m_curValues; i++)
cout << *(m_values + i) << endl;
} |
|
kann es leider nicht testen, da das Einlesen bei mir noch nicht klappt.
Du brauchst auf jeden Fall einen Zeiger vom Typ CMeasValue (dann hat ein Objekt auch die Größe von 16 Byte, keine 8 wie bei double). |
Jassy |
void print(){
double *m_valueZeiger = new double;
// Zugreifen mit this
cout << &m_value << this << endl;
}
So könnte ich doch den Wert ausgeben oder euler?
Die grundeinheit ist ja (m_exp)
.
Die kann ich ja einfach:
cout << exp endl; machen.
Als Bsp:
haben die das gegeben:
CMeasSeries@0012FE9C[50]:
leere Messreihe
CMeasSeries@0012FE9C[50]:
0: MeasValue@003467CC: 3.5*10^‐3 V
1: MeasValue@003467FC: 500*10^‐6 V
2: MeasValue@0034682C: 2.5*10^0 V
Maximalwert der Messreihe: MeasValue@0012FE6C: 2.5*10^0 V
Drücken Sie eine beliebige Taste . . .
Stimmt meine idee ein wenig? |
eulerscheZahl |
Genau, und du musst auch wieder darauf zugreifen können.
Es macht keinen Sinn, Variablen Messwert1, Messwert2, ... anzulegen.
Ein Array geht auch nicht, weil du nicht weiß, wie viele Messwerte gespeichert werden sollen. Daher die dynamische Speicherreservierung. |
Jassy |
Könnte ich für m_value nicht auch so speicher anlegen mit new?
Weiss nicht ob ich es so richtig mach.
double *m_valueZeiger = new double;
Für was muss ich denn alles speicher anlegen?
Nur für messwerte? |
eulerscheZahl |
Ich habe die Bedingung nicht wirklich geändert, nur rechts und links getauscht (finde ich so lesbarer).
Zitat: |
Und tut mir leid warum machst du das hier? |
Weil ich gerade nichts besseres zu tun habe - oder meinst du das malloc?
Das malloc mache ich, um für die Messwerte Speicherplatz zu schaffen, irgendwo müssen die ja hin. |
Jassy |
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
|
CMeasSeries::CMeasSeries(string baseUnit, int maxValues)
{
if(maxValues > 0) Wieso hast du hier die Bedingung geändert?
{
m_maxValues = maxValues;
m_baseUnit = baseUnit;
}
else
{
m_baseUnit = "";
maxValues = 10;
}
}
CMeasSeries::~CMeasSeries()
{
free(m_values); // Muss man das hier schreiben ?
} |
|
[/quote]
Fragen siehe code ?
Ich hoffe du bist noch nicht kaputt durch meine fragen.
Und tut mir leid warum machst du das hier?
// #include <cstdlib>
m_values = (CMeasValue*)malloc(m_maxValues * sizeof(CMeasValue));
Bitte um erklärung.
|
eulerscheZahl |
Dann stammt
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
|
CMeasSeries::CMeasSeries(string baseUnit, int maxValues)
{
if( 0 < maxValues )
{
m_maxValues = maxValues;
m_baseUnit = baseUnit;
}
else
{
m_baseUnit = "";
maxValues = 10;
}
CMeasSeries::CMeasSeries();
} |
|
von dir?
Dann kann ich ja daran mäkeln
Es gibt keinen zweiten Konstruktor (ist auch überflüssig wegen der default-Werte).
Stattdessen gibt es laut deinem Klassendiagramm einen Destruktor.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
CMeasSeries::CMeasSeries(string baseUnit, int maxValues)
{
if(maxValues > 0)
{
m_maxValues = maxValues;
m_baseUnit = baseUnit;
}
else
{
m_baseUnit = "";
maxValues = 10;
}
// #include <cstdlib>
m_values = (CMeasValue*)malloc(m_maxValues * sizeof(CMeasValue));
}
CMeasSeries::~CMeasSeries()
{
free(m_values);
} |
|
|
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen. |