Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Probleme mit beschreiben eines arrays.

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 ]
000
15.10.2009, 17:34 Uhr
~Der Praktikant
Gast


Also ich will einen Array beschrieben.. problem ist dabei das ich glaube das der array nicht so beschriben werden wie ich kann da die felder nicht frei sind...

kann ich irgendwie dafür sorgen das die vorgesehen felder frei werden damit ich sie dann beschreiben kann?

ich hoffe man kann es halbwegs verstehen... bin neuling in c++ und wurde etwas ins kalte wasser geschmissen.

C++:
dsp[i] = new OpenSGWidget(QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer | QGL::Rgba | QGL::DirectRendering), this);


also mit den dubber habe ich nach geschaut... es geht alles bis es zum beschreiben des vektors kommt.

bitte kann mir jemand helfen?

----------------
cpp-Tags eingefügt; - nächstes mal selber machen.

Dieser Post wurde am 16.10.2009 um 00:47 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.10.2009, 00:41 Uhr
Hans
Library Walker
(Operator)


Hi,

Zitat von ~Der Praktikant:
ich hoffe man kann es halbwegs verstehen...

naja, halbwegs. Frei nach dem Motte "Eine Rede ist keine Schreibe." solltest du das, was Du geschrieben hast noch mal durchlesen, bevor du es abschickst.


Zitat:

bin neuling in c++ und wurde etwas ins kalte wasser geschmissen.

C++:
dsp[i] = new OpenSGWidget(QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer | QGL::Rgba | QGL::DirectRendering), this);




Also wenn Du dich bei dieser Zeile ins kalte Wasser geschmissen vorkommst, vermute ich, dass Du vorher nicht aufgepasst hast. Denn ich kann mir schlecht vorstellen, das man sowas einem C++ Neuling vorsetzt. Aber egal. Nehmen wir mal den Anfang der Zeile:

C++:
dsp[i] = new ...


Da wird Speicherplatz angefordert, und ein Zeiger auf diesen (Speicher-)Platz in einem Array dsp an der Position i abgelegt. OpenSGWidget ist ein Funktionsaufruf. Soweit ich das heraus gefunden habe, scheint es exakter ein Konstruktoraufruf zu sein, der zu einer Klassenbibliothek für Echtzeitgrafikrendering gehört. Diese Grafik soll mit OpenGL berechnet und in einem Fenster dargestellt werden, das von Qt erzeugt wird. Das ist kein Anfängerstoff! - Allein über Qt und OpenGL lassen sich jeweils rund 1000-seitige Bücher schreiben oder ganzjährige Unterrichtskurse veranstalten. Und mit der verwendeten OpenSG-Bibliothek dürfte es sich ähnlich verhalten. Der Gebrauch solcher Klassenbibliotheken setzt voraus, das man C++ als Sprache schon kann, weil sie alle Möglichkeiten, die die Sprache bietet, rege nutzen.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 16.10.2009 um 00:45 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.10.2009, 01:53 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Also wenn Du dich bei dieser Zeile ins kalte Wasser geschmissen vorkommst, vermute ich, dass Du vorher nicht aufgepasst hast. Denn ich kann mir schlecht vorstellen, das man sowas einem C++ Neuling vorsetzt


Das mag sein aber das interessiert so einen oder anderen an der Uni nicht. Uns haben die mit solchen Dingen auch mal schön ins kalte Wasser geschmissen und dann trennt sich ziemlich schnell die Spreu vom Weizen. Ich glaube den Kurs haben damals nur 20% fertig gemacht. Die anderen haben sich Kurse gesucht durch die man leichter kommt...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.10.2009, 10:17 Uhr
~Der Praktikant
Gast


Ich entschuldige mich erstmal für meinen gestrigen Eintrag!
Also ich würde das heute nicht mehr verstehen was ich Gestern da geschrieben habe.

Aber ich war so fertig… war so stolz auf mich das ich es geschafft habe das Programm zu debuggen, ohne einen error, und dann kommt diese Speicherfehler.

Aber vorerst:
Ich studiere Mathematik und habe im Studium nur geringe Einblicke in C++ erhalten (eigentlich nur so die grobe Syntax)… arbeite eher mit Matlab oder Mtahematica.
Ich sollte in einen schon bereits existenten Programm ein Algorithmus einbauen und das Programm für n Durchläufe bereit stellen.

Für einen einzelnen Durchlauf war das kein Problem… aber um es für n Durchläufe zu wappnen musste ich auf Vektoren und Matrizen zurück greifen und genau hier ist jetzt das Problem.

Dieser dsp- Vektor funktioniert im einzelnen fall wenn dsp kein Vektor ist.
Aber genau dann wenn ich die Daten in den Vektor einlesen will bekomme ich eine Fehlermeldung.

Ihr fragt euch warum ich nicht hier nach Hilfe frage?
Also: Ich habe nachgefragt daher weiß ich das es ein Speicherfehler mit den Vektoren und den Zeiger ist (Zeiger auch so ne Sache die mir nicht ganz klar ist).
Ich soll versuchen denn Vektor zu deklarieren damit der Speicherplatz frei ist (so habe ich es verstanden) aber wie?
Kann ich das denn nicht einfach machen ohne das ich in Qt oder OpenGL eingreife?

Ich will endlich wissen ob mein Algorithmus richtig ist ...

Hoffentlich kann man das jetzt eher verstehen!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.10.2009, 18:59 Uhr
Hans
Library Walker
(Operator)



Zitat von ~Der Praktikant:
Ich entschuldige mich erstmal für meinen gestrigen Eintrag!
Also ich würde das heute nicht mehr verstehen was ich Gestern da geschrieben habe.

Angenommen. - Ich glaube, Du bist der Erste oder zumindest einer von ganz wenigen, die mal auf diese Idee kommen.


Zitat:

Für einen einzelnen Durchlauf war das kein Problem… aber um es für n Durchläufe zu wappnen musste ich auf Vektoren und Matrizen zurück greifen und genau hier ist jetzt das Problem.

Dieser dsp- Vektor funktioniert im einzelnen fall wenn dsp kein Vektor ist.
Aber genau dann wenn ich die Daten in den Vektor einlesen will bekomme ich eine Fehlermeldung.


Okay. Damit man Dir hier weiterhelfen kann, sind zwei Dinge nützlich, bzw. notwendig. Zum Einen die Deklaration von dsp die irgendwo am Anfang des Programms stehen sollte. Eine Zeile wie:

C++:
int *dsp;

oder auch ein Gebilde mit typedef davor. Zum Zweiten die Fehlermeldung, die der Compiler heraus schmeisst.


Zitat:

Ihr fragt euch warum ich nicht hier nach Hilfe frage?
Also: Ich habe nachgefragt daher weiß ich das es ein Speicherfehler mit den Vektoren und den Zeiger ist (Zeiger auch so ne Sache die mir nicht ganz klar ist).
Ich soll versuchen denn Vektor zu deklarieren damit der Speicherplatz frei ist (so habe ich es verstanden) aber wie?


Zum Thema Zeiger solltest Du mal die FAQs hier im Forum durchstöbern, da müsste was dazu stehen, ansonsten ein gutes Lehrbuch zu Rate ziehen, z.B. von U.Breymann.
Und bei den Vektoren wird es jetzt ein wenig problematisch, weil zwei Dinge gemeint sein können, die zwar ähnlich sind, aber nicht identisch. Zum einen meint man eine Datenstruktur, die einem Vektor aus der Mathematik ähnlich ist. Die wird in anderen Programmiersprachen auch als eindimensionales Array oder eindimensionales Feld bezeichnet. Gemeint ist aber immer das gleiche, nämlich eine Reihe von (im Speicher) hintereinander liegender Daten, die über einen Index angesprochen werden können. In C oder C++ deklariert man das meisst so:

C++:
int x[10];

Damit weist man den Compiler an, Speicherplatz für 10 ganze Zahlen (int) zur Verfügung zu stellen, die unter der Bezeichnung x plus einem Index angesprochen werden können. Also etwa:

C++:
x[3]=7;

womit dem 4. Element der Wert 7 zugewiesen wird. Dem vierten Element deswegen, weil die Zählung immer mit Null anfängt.
Soweit mal dazu. Dann gibt es in C++ noch eine vordefinierte Struktur, die vector heisst. Man beachte den Unterschied in der Schreibweise. Dabei handelt es sich um eine Klasse, die einem einen Teil der Arbeit zur Verwaltung der Daten abnimmt. Wenn die benutzt wird, steht oben im Quelltext:

C++:
include <vector>
dabei.
Damit hab ich allerdings auch noch nichts gemacht, weshalb ich nicht mehr weiterhelfen kann, wenn die verwendet wird.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.10.2009, 01:51 Uhr
~Der Praktikant
Gast


So erstmal danke für die Antwort!

also ich arbeite mit "include <vector>".
Die Deklaration sieht in ungefair so aus:

std::vector<Name*> dsp;

also "Name" weiß ich nicht auswendig...

ich hatte vorher:
"std::vector<Name> *dsp;"
stehen gehabt... da es im eigendlichen Programm so aus sah:
"name *dsp;"
aber da bekam ich dann nur errors uns so kam ich auf die idee es anders zu versuchen... darf ich das überhaupt?




ABER:

da ich das programm anders aufbauen muss, muss ich auch dsp nicht mehr als Vektor aufrufen...
daher ist das problem erstmal bei seite geschoben.

ich fände es trotzdem gut wenn mir jemand sagen könnte wie ich so ein problem aus den weg gehen kann.... wer weiß wann ich wieder darauf stoße?...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.10.2009, 09:22 Uhr
Oliver
S2-Pixelgeneral


Also erstmal müsste es wahrscheinlich


C++:
std::vector<Name> dsp;



heißen, da ja Name * dsp defacto ein Array ist, genauer gesagt ein Pointer auf den Anfang eines Arrays, d.h. du hättst ein Array aus Names und bräuchtest dann somit auch einen Vektor aus Names nicht aus Name-Pointern.

Wenn du in einem Array Speicher allokieren willst, geht das entweder im Konstruktor gleich bei der Definition:


C++:
std::vector<Name> dsp(5);
// entspricht:
Name dsp[5];



Oder du kannst die Größe später verändern mit resize, wobei dann nur die Elemente hinzugefügt oder gelöscht werden, die zuviel oder zuwenig sind, d.h. wenn du ein Vektor aus 3 Elementen hast und rufst dann resize mit 5 auf, bleiben die ersten 3 erhalten.


C++:
dsp.resize(5);


--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
19.10.2009, 09:12 Uhr
~Der Praktikant
Gast


Guten Morgen!

Also das mit dem "std::vector<name> dsp;" leuchtet mir ein... aber da ich schon das Programm umgeschrieben habe kann ich es nicht mehr prüfen.

und dein Tipp mit den allokieren und .resize(x) haben ich eben bei einen ähnlichen Problem gebraucht und benutzt.

vielen dank es hat geholfen!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
19.10.2009, 14:43 Uhr
~Der Praktikant
Gast


huhu!

wenn ich jetzt einen vektor von vektoren habe kann ich ihn dann wie folgt allokieren?:

std::vector< std::vector<float> > calidaten;
calidaten.resize(anzcam)(9);
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
19.10.2009, 16:40 Uhr
~Der Praktikant
Gast


huhu ich bin es mal wieder...

das problem ist ein ähnliches aber diesmal geht es um das rausschreiben aus einen vector.

also habe in einer funktion stehen:

for(i...){....

Namevector[i]=Name;

...}

in einer anderen funktion will ich gerade wieder diese daten raus lesen:

Name = Namevector[i];



die deklarationen sind folgende:

QString Name="";

std::vector< Namevector>;





also Debuggen geht aber wenn ich rauslesen möchte kommt wieder dieser speicherfehler...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


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: