Wpis z mikrobloga

Cześć Mirki, pomożecie? #programowanie #naukaprogramowania #cpp #sfml

main.cpp

object.cpp (Object.h raczej nie potrzebny)

Próbuję napisać program, który będzie w oknie wyświetlał animację poruszających się kilku kółek analogicznie jak w TYM kursie. Niestety mam problem z ostatnią pętlą w funkcji main, która miałby wyświetlać obiekty. Kombinowałem trochę, ale nie wiem już jakie argumenty podać, do jakiej klasy mają należeć itp. Kompilator wywala mi taki log:

-------------- Build: Debug in SFML new (compiler: GNU GCC Compiler)---------------

mingw32-g++.exe -Wall -g -DSFML_STATIC -I"C:...\SFML-2.1\include" -c "C:...\main.cpp" -o obj\Debug\main.o

C:...\main.cpp: In function 'int main()':

C:...\main.cpp:43:46: error: no matching function for call to 'sf::RenderWindow::draw()'

C:...\main.cpp:43:46: note: candidates are:

In file included from C:...SFML-2.1\include/SFML/Graphics/RenderTexture.hpp:33:0,

from C:...\include/SFML/Graphics.hpp:39,

from C:...\main.cpp:2:

C:...\SFML-2.1\include/SFML/Graphics/RenderTarget.hpp:236:10: note: void sf::RenderTarget::draw(const sf::Drawable&, const sf::RenderStates&)

C:...\SFML-2.1\include/SFML/Graphics/RenderTarget.hpp:236:10: note: no known conversion for argument 1 from '' to 'const sf::Drawable&'

C:...i\SFML-2.1\include/SFML/Graphics/RenderTarget.hpp:247:10: note: void sf::RenderTarget::draw(const sf::Vertex*, unsigned int, sf::PrimitiveType, const sf::RenderStates&)

C:...\SFML-2.1\include/SFML/Graphics/RenderTarget.hpp:247:10: note: candidate expects 4 arguments, 1 provided

Process terminated with status 1 (0 minutes, 4 seconds)

1 errors, 0 warnings (0 minutes, 4 seconds)
  • 17
@Pierwiastek_z_Czech: Przede wszystkim rada niezwiązana raczej z problem: zmień swojego pętlowego potworka na foreach z C++11, tj. for(auto obiekt : VObiekty) {OknoAplikacji.draw(obiekt);} Dużo czytelniej i prościej.

Natomiast jeśli chodzi o sam problem, to chyba jednak Object.h by się przydał. Nie za bardzo mogę wyczytać jakiego typu jest pole kształt Obiektu, a tu jest właśnie błąd, bo funkcja draw może rysować tylko określone obiekty.
@Pierwiastek_z_Czech: C++11 to też C++, tak samo jak Java 8 to dalej Java :P Absolutnie polecam się zapoznać, w tej pętli, którą napisałem masz już dwa nowe mechanizmy - "typ" auto, który nadaje obiektowi typ taki, jak typ innego obiektu (np. int a = 5; auto b = a; b będzie miało typ int) oraz właśnie pętla do iterowania po zbiorach foreach (tzn. zostanie wykonana dla każdego obiektu w zadanym kontenerze,
@hfaua: W tym przypadku też prawda. Można omówię dla @Pierwiastek_z_Czech

for(auto x : kontener)

W każdym przebiegu tej pętli będziesz kopiował kolejny obiekt z kontenera do zmiennej x, a następnie operował na takiej kopii. Jest to ogólnie nieprzydatne podejście, bo nawet jeśli tylko odczytujesz dane, to niepotrzebnie kopiujesz obiekty tracąc czas i śmiecąc pamięć. A jeśli dokonasz jakichś zmian - utracisz je.

for(auto& x : kontener)

Tym razem w każdym przebiegu