pasierdamian Temat założony przez niniejszego użytkownika |
Szablon funkcji i niepoprawne argumenty » 2015-08-31 08:28:29 Witam stworzyłem o to taką klase z funkcją szablonową: #include <SFML/Graphics.hpp> #include <SFML/Window.hpp>
#include "Ball.h"
using namespace std; using namespace sf; class Reflection { public: Reflection(); template < typename T > balls_Reflection( T & ball, float ySpeed[ 50 ], float xSpeed[ 50 ], float size, int numerofballs ); private: float xSpeed[ 49 ]; float ySpeed[ 49 ]; }; Reflection::Reflection() { } template < typename T > Reflection::void balls_Reflection( T & ball, float ySpeed[ 49 ], float xSpeed[ 49 ] float size, int numerofballs ) { for( int i = 1; i <= numerofballs; i++ ) { int positionY = ball[ i ].get_Position().y; if( positionY <= 20 ) { ySpeed[ i ] = - ySpeed[ i ]; } if( positionY >= 520.0 - 2 * size ) { ySpeed[ i ] = - ySpeed[ i ]; } int positionX = ball[ i ].get_Position().x; if( positionX <= 20 ) { xSpeed[ i ] = - xSpeed[ i ]; } if( positionX >= 620.0 - 2 * size ) { xSpeed[ i ] = - xSpeed[ i ]; } } } Jedna nie moge wywyłac poprawnie tej funkcji Reflection reflection; reflection.balls_Reflection < vector < Ball >>( ball, ySpeed[ 49 ], xSpeed[ 49 ], getRadius[ 49 ], 49 );
|
|
pekfos |
» 2015-08-31 10:49:16 Reflection::void balls_Reflection
|
Tak się tego nie robi. |
|
1aam2am1 |
» 2015-08-31 10:50:38 template < typename T > Reflection::void balls_Reflection( T & ball, float * ySpeed, float * xSpeed, float size, int numerofballs )
reflection.balls_Reflection( ball, ySpeed, xSpeed, getRadius, 49 );
|
|
pasierdamian Temat założony przez niniejszego użytkownika |
» 2015-08-31 15:08:11 Dzieki za pomoc, po drobnych zmianach dostaje nastepujace bledy 'Reflection::balls_Reflection': unable to match function definition to an existing declaration
error C4430: missing type specifier - int assumed.Note: C++does not support default - int
A oto i klasa #include <SFML/Graphics.hpp> #include <SFML/Window.hpp>
#include "Ball.h"
using namespace std; using namespace sf; class Reflection { public: Reflection(); template < typename T > balls_Reflection( T & ball, float * ySpeed, float * xSpeed, int numerofballs ); private: float xSpeed[ 49 ]; float ySpeed[ 49 ]; vector < Ball > ball; }; Reflection::Reflection() { } template < typename T > void Reflection::balls_Reflection( T & ball, float * ySpeed, float * xSpeed, int numerofballs ) { for( int i = 1; i <= numerofballs; i++ ) { int positionY = ball[ i ].get_Position().y; if( positionY <= 20 ) { ySpeed[ i ] = - ySpeed[ i ]; } if( positionY >= 520.0 - 2 * ball[ i ].get_Radius() ) { ySpeed[ i ] = - ySpeed[ i ]; } int positionX = ball[ i ].get_Position().x; if( positionX <= 20 ) { xSpeed[ i ] = - xSpeed[ i ]; } if( positionX >= 620.0 - 2 * ball[ i ].get_Radius() ) { xSpeed[ i ] = - xSpeed[ i ]; } } } Coś musi być nie tak z argumentami, ale w takim razie co? |
|
pekfos |
» 2015-08-31 16:19:56 template < typename T > balls_Reflection( T & ball, float * ySpeed, float * xSpeed, int numerofballs );
|
Brakuje typu zwracanego. |
|
pasierdamian Temat założony przez niniejszego użytkownika |
» 2015-08-31 16:45:08 Dzięki wielkie za pomoc, niestety otrzymuje błąd przy debugowaniu Expression vector subsript out of range Wywłoanie Reflection reflection; reflection.balls_Reflection( ball, ySpeed, xSpeed, 49 ); oraz klasa Reflection #include <SFML/Graphics.hpp> #include <SFML/Window.hpp> #include <vector> #include "Ball.h"
using namespace std; using namespace sf; class Reflection { public: Reflection(); template < typename T > void balls_Reflection( T & ball, float * ySpeed, float * xSpeed, int numerofballs ); private: float xSpeed[ 49 ]; float ySpeed[ 49 ]; vector < Ball > ball; };
Reflection::Reflection() { } template < typename T > void Reflection::balls_Reflection( T & ball, float * ySpeed, float * xSpeed, int numerofballs ) { for( int i = 1; i <= numerofballs; i++ ) { int positionY = ball[ i ].get_Position().y; if( positionY <= 20 ) { ySpeed[ i ] = - ySpeed[ i ]; } if( positionY >= 520.0 - 2 * ball[ i ].get_Radius() ) { ySpeed[ i ] = - ySpeed[ i ]; } int positionX = ball[ i ].get_Position().x; if( positionX <= 20 ) { xSpeed[ i ] = - xSpeed[ i ]; } if( positionX >= 620.0 - 2 * ball[ i ].get_Radius() ) { xSpeed[ i ] = - xSpeed[ i ]; } } } Wszytsko wygląda juz ok , ale nadla coś jest nie tak |
|
Lora |
» 2015-08-31 18:10:55 for( int i = 1; i <= numerofballs; i++ )
Nie powinno czasem być for( int i = 0; i < numerofballs; i++ ) ? Dlaczego ball przekazujesz w argumencie funkcji, skoro jest to składowa tej klasy? Chyba że to jest co innego, to lepiej nadać jakąś inną nazwę. float xSpeed[ 49 ]; float ySpeed[ 49 ];
A co jeśli numberofballs przekazane do funkcji będzie większe niż 50? |
|
pasierdamian Temat założony przez niniejszego użytkownika |
» 2015-08-31 18:35:19 Dzięki wielkie, działa.
Faktycznie niepotrzebne pole w mojej funkcji, jesli chodzi o tab Speed to zakładłem, ze bedzie zawsze tylko mniejsza od 49 |
|
« 1 » |