Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » C++ Programmierung » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

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^&#8208;3 V
1: MeasValue@003467FC: 500*10^&#8208;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. smile
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 smile
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.