JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=66421012cacbb80c812a5a7dd876060fMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

problem bei ::std::vector

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 16.02.2006, 21:24    Titel: problem bei ::std::vector Antworten mit Zitat

Hi

Eiso ich hab ein Strukture:
Code:

struct DynUnit
{
<edt>lcgb ist ein bool,lcgi ist ein Integer,lcgui ist ein unsigned integer,lcgv2 ist so was änhliches wie ein D3DXVECTOR2,lcgti ist ein Time Integer(LONGLONG)</edit>
lcgb Schlag;
lcgi StatUnit;
lcgi Lebenspunkte;
lcgi Umfang; 
::std::vector<lcgi> BildetAus;
lcgi Reichweite;
lcgi Schaden;
lcgf Rotation;
lcgui TexturNummer;
lcgv2 Position;
lcgv2 Zielpunkt;
lcgv2 Geschwindigkeit;
lcgti Schlaggeschwindigkeit;
lcgti SchlagZeit;
lcgti ProduzionBegin;
Rohstoffe Produziert; //Pro Sekunde
::std::vector<BuildUnit> BuildUnits;
};


und davon ein vector element:
Code:

::std::vector<DynUnit> DynamischeUnits;


jedesmal wenn ich davon eine Funktion die Parameter benötigt:
Code:

DynamischeUnits.push_back(Unit); |
DynamischeUnits.resize(1) // alles möglichen halt  :cry:

kommt:
Code:

D:\Microsoft Visual Studio 8\VC\include\xutility(2726) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const DynUnit' (or there is no acceptable conversion)
1>        c:\dokumente und einstellungen\lukas.h1f2x2\eigene dateien\visual studio 2005\projects\the ring war\karteneditor\karteneditor\TheRingWarUnit.h(52): could be 'DynUnit &DynUnit::operator =(DynUnit &)'
1>        while trying to match the argument list '(DynUnit, const DynUnit)'
1>        D:\Microsoft Visual Studio 8\VC\include\xutility(2754) : see reference to function template instantiation 'void std::_Fill<DynUnit*,_Ty>(_FwdIt,_FwdIt,const _Ty &)' being compiled
1>        with
1>        [
1>            _Ty=DynUnit,
1>            _FwdIt=DynUnit *
1>        ]
1>        D:\Microsoft Visual Studio 8\VC\include\vector(1187) : see reference to function template instantiation 'void std::fill<DynUnit*,_Ty>(_FwdIt,_FwdIt,const _Ty &)' being compiled
1>        with
1>        [
1>            _Ty=DynUnit,
1>            _FwdIt=DynUnit *
1>        ]
1>        D:\Microsoft Visual Studio 8\VC\include\vector(1117) : while compiling class template member function 'void std::vector<_Ty>::_Insert_n(std::_Vector_iterator<_Ty,_Alloc>,__w64 unsigned int,const _Ty &)'
1>        with
1>        [
1>            _Ty=DynUnit,
1>            _Alloc=std::allocator<DynUnit>
1>        ]
1>        c:\dokumente und einstellungen\lukas.h1f2x2\eigene dateien\visual studio 2005\projects\the ring war\karteneditor\karteneditor\TheRingWarUnit.h(92) : see reference to class template instantiation 'std::vector<_Ty>' being compiled
1>        with
1>        [
1>            _Ty=DynUnit
1>        ]


So ein änliches Problem gab es zwar schonmal aber irgendwie werd ich daraus nicht klug.
Vielleicht weiß ja jemand von euch was da falsch ist.

mfg fast hawk
_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann


Zuletzt bearbeitet von fast hawk am 17.02.2006, 13:59, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 39
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 16.02.2006, 21:31    Titel: Antworten mit Zitat

Speicher lieber zeiger aud die dynUnits.
So würde der vector beim push_pack glaube ich hin gehen und das element kopieren. udn das kann er nur mit einem copy konstruktor oder einem operator=.

Also entweder zeiger speichern, oder operator= implementieren.

edit:
sorry bin etwas kurz angebunden. ich geh jetzt schlafen Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 17.02.2006, 14:23    Titel: Antworten mit Zitat

Eiso ich was wieder ein dödel dass mit dem operator= hab ich auch schon probiert hat aber nichts geholfen jetzt saß ich 3 Tage an einem Leichtsinnsfehler.

wird zeit für ein neues Ratespiel:Rate Rate
_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 17.02.2006, 20:32    Titel: Antworten mit Zitat

fast-hawk
ich nehme bei strukturen und dergleichen meistens <list>; das läßt sich (für meine Bedürfnisse) am besten handhaben. Einziger Umweg ist: für ein Element in der Mitte musst du die Liste durchlaufen, was aber kein allzu großes Problem ist. Dort musst du dann auch keine Zeiger auf die Strukturen übergeben (wie xardias bei <vector> vorgeschlagen hat), weil wegen "placement new" sowieso alles in der Liste gemanaget wird Arrow es gibt also keine langen Kopierungen; wie das z.B. bei Funktionen der Fall wäre (d.h. auch, niemals eine Struktur oder Instanz o.Ä. als solche einer Funktion übergeben, sondern immer mit zeigern arbeiten)

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 17.02.2006, 20:51    Titel: Antworten mit Zitat

DirectXer.
Check ich nicht ich weiß ich hab ne lange Leitung.
aber wenn ich nur immer Zeiger dem Vector übergebe und
das eine lokale Variable ist dann hab ich nen lehren Zeiger rumhängen oder??
_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 18.02.2006, 11:29    Titel: Antworten mit Zitat

Eiso ich glaub ich habs geblickt.
du meist das man immer eine dynamische Strukture nimmt.(new)
und dann einfach den Zeiger darauf übergibt. oder??
das ist allerdings dann ein großer Peformance gewinn und das ohne
Nachteile ausser dem das man den Destruktor gezielt einsetzen muss und das ist kein wirklicher Nachteil.
_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 18.02.2006, 12:02    Titel: Antworten mit Zitat

fast hawk hat Folgendes geschrieben:
Eiso ich glaub ich habs geblickt.
du meist das man immer eine dynamische Strukture nimmt.(new)
und dann einfach den Zeiger darauf übergibt. oder??
das ist allerdings dann ein großer Peformance gewinn und das ohne
Nachteile ausser dem das man den Destruktor gezielt einsetzen muss und das ist kein wirklicher Nachteil.

jo, so in etwa Wink wie gesagt, bei den meisten STL-Containern wie <list> ist das egal, da da sowieso alles so geregelt wird. Aber bei Funktionen etc. immer wenn man eine Struktur übergeben will, die Adresse anstatt der sturktur selbst übergeben, und mit Pointern hantieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum