Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Szablon funkcji i niepoprawne argumenty

Ostatnio zmodyfikowano 2015-08-31 18:35
Autor Wiadomość
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ą:
C/C++
#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
C/C++
Reflection reflection;
reflection.balls_Reflection < vector < Ball >>( ball, ySpeed[ 49 ], xSpeed[ 49 ], getRadius[ 49 ], 49 );




P-137081
pekfos
» 2015-08-31 10:49:16
C/C++
Reflection::void balls_Reflection
Tak się tego nie robi.
P-137082
1aam2am1
» 2015-08-31 10:50:38
C/C++
template < typename T >
Reflection::void balls_Reflection( T & ball, float * ySpeed, float * xSpeed, float size, int numerofballs )
C/C++
reflection.balls_Reflection( ball, ySpeed, xSpeed, getRadius, 49 );
P-137083
pasierdamian
Temat założony przez niniejszego użytkownika
» 2015-08-31 15:08:11
Dzieki za pomoc, po drobnych zmianach dostaje nastepujace bledy

C/C++
'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
C/C++
#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?



P-137092
pekfos
» 2015-08-31 16:19:56
C/C++
template < typename T >
balls_Reflection( T & ball, float * ySpeed, float * xSpeed, int numerofballs );
Brakuje typu zwracanego.
P-137093
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

C/C++
Reflection reflection;
reflection.balls_Reflection( ball, ySpeed, xSpeed, 49 );



oraz klasa Reflection
C/C++
#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
P-137095
Lora
» 2015-08-31 18:10:55
C/C++
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ę.

C/C++
float xSpeed[ 49 ];
float ySpeed[ 49 ];

A co jeśli numberofballs przekazane do funkcji będzie większe niż 50?
P-137096
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
P-137098
« 1 »
  Strona 1 z 1