 |
JLI Spieleprogrammierung
|
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
|
Verfasst am: 16.02.2006, 21:24 Titel: problem bei ::std::vector |
|
|
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 |
|
 |
xardias JLI Master

Alter: 39 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 16.02.2006, 21:31 Titel: |
|
|
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  |
|
Nach oben |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 17.02.2006, 14:23 Titel: |
|
|
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 |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 17.02.2006, 20:32 Titel: |
|
|
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 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 |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 17.02.2006, 20:51 Titel: |
|
|
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 |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 18.02.2006, 11:29 Titel: |
|
|
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 |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 18.02.2006, 12:02 Titel: |
|
|
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 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 |
|
 |
|
|
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
|