Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

13.04.2015, 18:51

C++ Smartpointer problem

Hallo liebe Spieleprogrammierer
Ich habe in C++ SFML ein Projekt erstellt und ich habe ein CollisionSystem erstellt und da übergebe ich 2 andere SmartPointer.


player=std::make_unique<Player>(sf::Vector2f(0,game[0].getSize().y/2));
enemyManager=std::make_unique<EnemyManager>();
collisionSystem=std::make_unique<CollisionSystem>(player,enemyManager->getList()); //Hier ist der Fehler

Fehlermeldung:
Error 2 error C2664: 'CollisionSystem::CollisionSystem(const CollisionSystem &)' : cannot convert argument 1 from 'std::unique_ptr<Player,std::default_delete<Player>>' to 'Player *
Kann mir irgendjemand helfen?

PS: Der Knopf für den C++ Code funktioniert nicht


DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

13.04.2015, 18:58

Hmm es sieht so aus als wüstest du noch nicht wirklich was du da machst.
Wann hast du mit C++ angefangen?

3

13.04.2015, 19:15

Ich arbeite zum ersten Mal mit Smart Pointern. Da kann es schon mal vorkommen das man nicht weiss was man macht. Und ich programmiere schon seit ungefähr 2 Jahren in C++.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

13.04.2015, 19:31

player.get()
Das erfordert aber const-correctness.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

13.04.2015, 19:42

Was meinst du mit const-correctnes?
Ich höre das gerade zum ersten Mal.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

13.04.2015, 19:45

Vergiss das für Dein hier vorliegendes Problem. Const-correctness ist aber ein großes Thema in C++, das hier kurz zusammengefasst zu kurz käme. Bei Google findest Du bestimmt sehr ausführliche Beschreibungen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

7

13.04.2015, 21:11

Ich habe gefragt weil der Fehler ziemlich genau sagt was falsch ist.
Du schreibst ja auch nicht:

C-/C++-Quelltext

1
int foo = "Hallo Welt";

8

13.04.2015, 23:52

Die wesentliche Frage ist doch, was das CollisionSystem mit dem Player macht. Also ob es ihn verwaltet oder ihn nur benutzt. Davon hängt ab, ob ein std::move(player) oder ein player.get() angebracht ist.
Aber um das entscheiden zu können, muss man schon ein recht gutes Verständnis vom Memory-Management im modernen C++ haben. Leider weiß ich gerade auch echt keinen guten Artikel, der das schön, aber ausführlich genug zusammen fasst. Irgendwelche Vorschläge?


player.get()
Das erfordert aber const-correctness.


Wieso const-correctness? Was spricht dagegen den Spieler zu verändern?
Lieber dumm fragen, als dumm bleiben!

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

14.04.2015, 06:42

Wieso const-correctness? Was spricht dagegen den Spieler zu verändern?
Vergiss das für Dein hier vorliegendes Problem.



Da sein Collision System einen Player* erwartet, ist ein move wohl unangebracht ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

10

14.04.2015, 08:59

Da sein Collision System einen Player* erwartet, ist ein move wohl unangebracht ;)

Naja, möglicherweise verwaltet CollisionSystem die Objekte ja auch und sollte daher eigentlich einen unique_ptr bekommen.

@SlyGamer72HD
Es geht hier also möglicherweise noch nicht um einen Compilerfehler, sondern eher um einen Designfehler, weil ein bisschen unklar ist, was welcher Programmteil eigentlich machen soll. Ich hab mal ein bisschen gesucht, und folgender Artikel scheint zumindest alle Grundlagen anzusprechen (ich hoffe Englisch ist ok, auf Deutsch wird es noch schwerer, etwas gutes zu finden):

http://www.drdobbs.com/cpp/c11-uniqueptr/240002708

Wenn du das gelesen hast, sollte klar sein, was zu tun ist.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige