IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

probleme passage de paramètre fonction avec const


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Juin 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Juin 2015
    Messages : 31
    Points : 21
    Points
    21
    Par défaut probleme passage de paramètre fonction avec const
    Bonjour,
    J'aimerai avoir des précisions sur le pasage par référence constante, je vais montrer les exemple directement ce sera plus parlant

    mon.h de ma classe comporte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool intersect(const Ray &r, float t0, float t1) const;
    monn/cpp de ma classe comporte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool Box::intersect(const Ray &r, float t0, float t1) const {...
    appel depuis le main :
    erreur :
    Error: il n'existe aucune conversion définie par l'utilisateur appropriée de Ray en const Ray
    ok maintenant

    mon.h de ma classe comporte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool intersect(Ray &r, float t0, float t1) const;
    monn/cpp de ma classe comporte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool Box::intersect(Ray &r, float t0, float t1) const {...
    appel depuis le main :
    erreur :
    Error: impossible d'initialiser une référence de type "Ray &"(non qualifié const) avec une valeur de type "Ray"
    bon j'ai testé ça aussi :

    mon.h de ma classe comporte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool intersect(Ray const &r, float t0, float t1) const;
    monn/cpp de ma classe comporte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool Box::intersect(Ray const &r, float t0, float t1) const {...
    appel depuis le main :
    erreur :
    Error: il n'existe aucune conversion définie par l'utilisateur appropriée de "Ray" en "const Ray"

  2. #2
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello,

    Il va falloir donner plus de détails car on peut pas deviner d'où vient le problème.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Juin 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Juin 2015
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par Iradrille Voir le message
    Hello,

    Il va falloir donner plus de détails car on peut pas deviner d'où vient le problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include "box.h"
     
    Box::Box(const Vec3f &mini, const Vec3f &maxi) {
    		bounds[0] = mini;
    		bounds[1] = maxi;
    	}
     
    void Box::expand(Box box){
    	bounds[0] = Vec3f(std::min(box.bounds[0].x,bounds[0].x),std::min(box.bounds[0].x,bounds[0].x),std::min(box.bounds[0].x,bounds[0].x));	
    	bounds[1] = Vec3f(std::max(box.bounds[0].x,bounds[0].x),std::max(box.bounds[0].x,bounds[0].x),std::max(box.bounds[0].x,bounds[0].x));
    }
     
    bool Box::intersect( Ray const &r, float t0, float t1) const {
    	float tmin, tmax, tymin, tymax, tzmin, tzmax;
    	tmin = (bounds[r.sign[0]].x - r.origin.x) * r.inv_direction.x;
    	tmax = (bounds[1-r.sign[0]].x - r.origin.x) * r.inv_direction.x;
    	tymin = (bounds[r.sign[1]].y - r.origin.y) * r.inv_direction.y;
    	tymax = (bounds[1-r.sign[1]].y - r.origin.y) * r.inv_direction.y;
    	if ( (tmin > tymax) || (tymin > tmax) )
    		return false;
    	if (tymin > tmin)
    		tmin = tymin;
    	if (tymax < tmax)
    		tmax = tymax;
    	tzmin = (bounds[r.sign[2]].z - r.origin.z) * r.inv_direction.z;
    	tzmax = (bounds[1-r.sign[2]].z - r.origin.z) * r.inv_direction.z;
    	if ( (tmin > tzmax) || (tzmin > tmax) )
    		return false;
    	if (tzmin > tmin)
    		tmin = tzmin;
    	if (tzmax < tmax)
    		tmax = tzmax;
    	return ( (tmin < t1) && (tmax > t0) );
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Box {
    public:
    	Box();
    	Box(const Vec3f &mini, const Vec3f &maxi);
    	bool intersect(Ray const &r, float t0, float t1) const;
    	void expand(Box box);
     
    protected :
    	Vec3f bounds[2];
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    int main(int argc, char **argv)
    {
    	Vec3f mini(1,1,1);
    	Vec3f maxi(2,2,2);
    	Box b(mini,maxi);
    	Vec3f o(1.5,1.5,0);
    	Vec3f d(0,0,1);
    	Ray r(o,d);
    	if(b.intersect(r,0,4))
    		cout << "interstion ok"<< endl;
    	else
    		cout << "nok" <<endl;
    
    	system("pause");
    	return 0;
    }
    l'erreur se trouve au niveau du "r" souligné

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Pour la deuxième erreur, c'est qu'on ne peut pas fournir une valeur temporaire à une référence modifiante (Ray&).

    Pour la première, c'est probablement lié à une interférence entre plusieurs noms "Ray".
    Vérifie les namespace et autre.
    Vérifie aussi que ce ne soit pas un include manquant (si c'est ca, ton compilateur n'est pas poli)
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hum...

    En ajoutant les classes Vec3f et Ray ça compile sans problème. A quoi elles ressemblent ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    struct Vec3f {
    	float x, y, z;
     
    	Vec3f() { }
    	Vec3f(float, float, float) { }
    };
     
    struct Ray {
    	Ray(Vec3f const&, Vec3f const&) { }
     
    	int sign[42];
    	Vec3f origin;
    	Vec3f inv_direction;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    #include <iostream>
    #include <algorithm>
     
    using std::cout;
    using std::endl;
     
    struct Vec3f {
    	float x, y, z;
     
    	Vec3f() { }
    	Vec3f(float, float, float) { }
    };
     
    struct Ray {
    	Ray(Vec3f const&, Vec3f const&) { }
     
    	int sign[42];
    	Vec3f origin;
    	Vec3f inv_direction;
    };
     
    class Box {
    public:
    	Box();
    	Box(const Vec3f &mini, const Vec3f &maxi);
    	bool intersect(Ray const &r, float t0, float t1) const;
    	void expand(Box box);
     
    protected:
    	Vec3f bounds[2];
    };
     
    Box::Box(const Vec3f &mini, const Vec3f &maxi) {
    	bounds[0] = mini;
    	bounds[1] = maxi;
    }
     
    void Box::expand(Box box) {
    	bounds[0] = Vec3f(std::min(box.bounds[0].x, bounds[0].x), std::min(box.bounds[0].x, bounds[0].x), std::min(box.bounds[0].x, bounds[0].x));
    	bounds[1] = Vec3f(std::max(box.bounds[0].x, bounds[0].x), std::max(box.bounds[0].x, bounds[0].x), std::max(box.bounds[0].x, bounds[0].x));
    }
     
    bool Box::intersect(Ray const &r, float t0, float t1) const {
    	float tmin, tmax, tymin, tymax, tzmin, tzmax;
    	tmin = (bounds[r.sign[0]].x - r.origin.x) * r.inv_direction.x;
    	tmax = (bounds[1 - r.sign[0]].x - r.origin.x) * r.inv_direction.x;
    	tymin = (bounds[r.sign[1]].y - r.origin.y) * r.inv_direction.y;
    	tymax = (bounds[1 - r.sign[1]].y - r.origin.y) * r.inv_direction.y;
    	if ((tmin > tymax) || (tymin > tmax))
    		return false;
    	if (tymin > tmin)
    		tmin = tymin;
    	if (tymax < tmax)
    		tmax = tymax;
    	tzmin = (bounds[r.sign[2]].z - r.origin.z) * r.inv_direction.z;
    	tzmax = (bounds[1 - r.sign[2]].z - r.origin.z) * r.inv_direction.z;
    	if ((tmin > tzmax) || (tzmin > tmax))
    		return false;
    	if (tzmin > tmin)
    		tmin = tzmin;
    	if (tzmax < tmax)
    		tmax = tzmax;
    	return ((tmin < t1) && (tmax > t0));
    	return false;
    }
     
    int main(int argc, char **argv)
    {
    	Vec3f mini(1, 1, 1);
    	Vec3f maxi(2, 2, 2);
    	Box b(mini, maxi);
    	Vec3f o(1.5, 1.5, 0);
    	Vec3f d(0, 0, 1);
    	Ray r(o, d);
    	if (b.intersect(r, 0, 4))
    		cout << "interstion ok" << endl;
    	else
    		cout << "nok" << endl;
     
    	system("pause");
    	return 0;
    }

  6. #6
    Membre à l'essai
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Juin 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Juin 2015
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Pour la première, c'est probablement lié à une interférence entre plusieurs noms "Ray".
    Vérifie les namespace et autre.
    Je pense que c'est la cause en effet, le problème c'est que j'ai plusieurs classe qui s'incluent les unes les autres parfois oui parfois non du coup j'ai mis des
    #ifndef EX
    #define EX
    #include "exemple.h"
    #endif

    à chaque fois mais ça ne fonctionne, toujours pas c'est quoi la bonne méthode du coup svp ?

  7. #7
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    mettre le define dans le .h

    utiliser des namespace et ne pas (trop) utiliser using namespace
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  8. #8
    Membre à l'essai
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Juin 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Juin 2015
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    C'est ce que j'ai fait je vous met mes fichiers parceque là je m'en sors pas, le compilo me met des erreurs à cotés de la plaque
    geometry.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #include <cstdlib>
    #include <cstdio>
    #include <iostream>
    #include <iomanip>
    #include <cmath>
    #include <stdint.h>
     
    template<typename T>
    class Vec3
    {
    public:
        Vec3() : x(T(0)), y(T(0)), z(T(0)) {}
        Vec3(T xx) : x(xx), y(xx), z(xx) {}
        Vec3(T xx, T yy, T zz) : x(xx), y(yy), z(zz) {}
        Vec3 operator + (const Vec3 &v) const
        { return Vec3(x + v.x, y + v.y, z + v.z); }
        Vec3 operator - (const Vec3 &v) const
        { return Vec3(x - v.x, y - v.y, z - v.z); }
        Vec3 operator - () const
        { return Vec3(-x, -y, -z); }
        Vec3 operator * (const T &r) const
        { return Vec3(x * r, y * r, z * r); }
        Vec3 operator * (const Vec3 &v) const
        { return Vec3(x * v.x, y * v.y, z * v.z); }
        T dotProduct(const Vec3<T> &v) const
        { return x * v.x + y * v.y + z * v.z; }
        Vec3& operator /= (const T &r)
        { x /= r, y /= r, z /= r; return *this; }
        Vec3& operator *= (const T &r)
        { x *= r, y *= r, z *= r; return *this; }
        Vec3 crossProduct(const Vec3<T> &v) const
        { return Vec3<T>(y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x); }
        T norm() const
        { return x * x + y * y + z * z; }
        T length() const
        { return sqrt(norm()); }
    	bool operator < (const Vec3<T> &v)
    	{ return x<v.x && y<v.y && z<v.z ;}
        const T& operator [] (uint8_t i) const { return (&x)[i]; }
        T& operator [] (uint8_t i) { return (&x)[i]; }
        Vec3& normalize()
        {
            T n = norm();
            if (n > 0) {
                T factor = 1 / sqrt(n);
                x *= factor, y *= factor, z *= factor;
            }
     
            return *this;
        }  
        T x, y, z;
    };
    typedef Vec3<float> Vec3f;
    typedef Vec3<int> Vec3i;
    triangle.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <vector>
    #ifndef BOX
    #define Box
    #include "box.h"
    #endif
     
    class Triangle{
    public:
     
    	Triangle(){
    		p0 = 0;
    		p1 = 0;
    		p2 = 0;
    	}
     
    	Triangle(Vec3i indices, const std::vector<Vec3f> &vertexList);
    	Box getBoundingBox();
     
    	Vec3f *p0,*p1,*p2:
    };
    triangle.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include "triangle.h"
    #include "box.h"
     
    Box Triangle::getBoundingBox(){	
    		*p0=0;
    		Vec3f boxMin(std::min(p0->x,std::min(p1->x,p2->x)),std::min(p0->y,std::min(p1->y,p2->y)),std::min(p0->z,std::min(p1->z,p2->z)));
    		Vec3f boxMax(std::max(p0->x,std::max(p1->x,p2->x)),std::max(p0->y,std::max(p1->y,p2->y)),std::max(p0->z,std::max(p1->z,p2->z)));
    		return Box(boxMin,boxMax);
    	}
    Triangle::Triangle(Vec3i indices, const std::vector<Vec3f> &vertexList){
    		p0 = vertexList[indices.x];
    		p1 = vertexList[indices.y];
    		p2 = vertexList[indices.z];
    	}
    ray.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #ifndef GEO
    #define GEO
    #include "geometry.h"
    #endif
     
    class Ray {
    public:
    	Ray(Vec3f &o, Vec3f &d) {
    		origin = o;
    		direction = d;
    		inv_direction = Vec3f(1/d.x, 1/d.y, 1/d.z);
    		sign[0] = (inv_direction.x < 0);
    		sign[1] = (inv_direction.y < 0);
    		sign[2] = (inv_direction.z < 0);
    	}
    	Vec3f origin;
    	Vec3f direction;
    	Vec3f inv_direction;
    	int sign[3];
    };
    box.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #ifndef RAY
    #define RAY
    #include "ray.h"
    #endif
     
    class Box {
    public:
    	Box(const Vec3f &mini, const Vec3f &maxi);
    	bool intersect(const Ray &r, float t0, float t1) const;
    	void expand(Box box);
     
    protected :
    	Vec3f bounds[2];
    };
    box.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #ifndef RAY
    #define RAY
    #include "ray.h"
    #endif
     
    class Box {
    public:
    	Box(const Vec3f &mini, const Vec3f &maxi);
    	bool intersect(const Ray &r, float t0, float t1) const;
    	void expand(Box box);
     
    protected :
    	Vec3f bounds[2];
    };
    main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <windows.h>
     
    int main(int argc, char **argv)
    {
     
    	system("pause");
    	return 0;
    }

  9. #9
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Bonjour,

    Je comprends que le compilateur soit perdu, c'est un peu le chaos avec ces #ifndef sauvages.

    Pour éviter les ennuis, vaut mieux respecter l'organisation définie dans la FAQ :
    http://cpp.developpez.com/faq/cpp/?p...un-fichier-cpp

    En gros :

    Dans Truc.h, entourer le code "d'include guard" pour éviter les pb d'inclusions multiples :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #ifndef IDENTIFIANT_TRUC
    #define IDENTIFIANT_TRUC
     
    // le code
    ...
     
    #endif
    Truc.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include "Truc.h"
     
    // le code
    // ...
    Puis pour régler les problèmes d'inter-inclusion entre classes, il faut utiliser les déclarations anticipées (forward declaration)
    Un résumé ici :

    http://stackoverflow.com/questions/5...rd-declaration

    Un example, dans ta classe Triangle.h, tu peux faire une déclaration anticipée de Box, pas besoin d'inclure Box.h (Par contre il faudra faire un #include "Box.h" dans Triangle.cpp)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    #include <vector>
     
    class Box; // declaration anticipée
     
    class Triangle{
    public:
     
    	Triangle(){
    		p0 = 0;
    		p1 = 0;
    		p2 = 0;
    	}
     
    	Triangle(Vec3i indices, const std::vector<Vec3f> &vertexList);
    	Box getBoundingBox();
     
    	Vec3f *p0,*p1,*p2:
    };

  10. #10
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    la bonne manière de faire une "include guard" c'est dans le fichier inclus, pas dans l'inclueur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #ifndef RAY_H_INCLUDED
    #define RAY_H_INCLUDED
    #include "geometry.h"
     
    struct Ray {
    	Ray(Vec3f const& o, Vec3f const& d) :
    		origin(o), direction(d),
    		inv_direction(1/d.x, 1/d.y, 1/d.z)
    	{
    		sign[0] = (inv_direction.x < 0);
    		sign[1] = (inv_direction.y < 0);
    		sign[2] = (inv_direction.z < 0);
    	}
    	Vec3f origin;
    	Vec3f direction;
    	Vec3f inv_direction;
    	int sign[3];
    };
    #endif
    J'en profite opur améliorer ton constructeur: utilisation de la liste d'initialisation, et des références constantes.

    Fais de même avec tous tes .h, et le problème devrait se résoudre de lui même.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par Arzar Voir le message
    Un example, dans ta classe Triangle.h, tu peux faire une déclaration anticipée de Box, pas besoin d'inclure Box.h (Par contre il faudra faire un #include "Box.h" dans Triangle.cpp)
    Je ne crois pas que ça marche dans cet exemple, un objet de la classe Box étant retourné par valeur par une des fonctions membres.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Juin 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Juin 2015
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Merci ça marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passage plusieurs paramètres + fonction DECODE
    Par Hawaisunset dans le forum BIRT
    Réponses: 4
    Dernier message: 15/03/2012, 17h45
  2. Passage de paramètre par référence + const
    Par Seabast888 dans le forum Débuter
    Réponses: 4
    Dernier message: 18/10/2009, 00h59
  3. Probleme passage de paramètres à EventListener dans boucle for
    Par bigboss87 dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 14/08/2009, 11h23
  4. Probleme passage de paramêtre
    Par lerorodu51 dans le forum NetBeans
    Réponses: 3
    Dernier message: 03/06/2009, 19h17
  5. Probleme passage de paramétre
    Par chungo_007 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 14/01/2008, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo