| View previous topic :: View next topic |
| Author |
Message |
korchkidu Guest
|
Posted: Thu Nov 04, 2004 6:46 pm Post subject: cannot convert from 'const double [4][4]' to 'MatriX ' |
|
|
Bonjour,
je ne comprends pas pourquoi le programme suivant me sort une erreur:
#include <stdio.h>
#include <vector>
typedef double MatriX[4][4];
int main(void)
{
std::vector<MatriX> test;
MatriX matrix;
test.push_back(matrix);
return 0;
}
VC++ .NET: error C2440: 'initializing' : cannot convert from 'const
double [4][4]' to 'MatriX '
Pourquoi il me sors un const double [4][4]?
K.
|
|
| Back to top |
|
 |
Horst Kraemer Guest
|
Posted: Thu Nov 04, 2004 7:51 pm Post subject: Re: cannot convert from 'const double [4][4]' to 'MatriX ' |
|
|
korchkidu <korch_ki_du (AT) yahoo (DOT) fr> wrote:
| Quote: | Bonjour,
je ne comprends pas pourquoi le programme suivant me sort une erreur:
#include <stdio.h
#include
typedef double MatriX[4][4];
int main(void)
{
std::vector
MatriX matrix;
test.push_back(matrix);
return 0;
}
VC++ .NET: error C2440: 'initializing' : cannot convert from 'const
double [4][4]' to 'MatriX '
Pourquoi il me sors un const double [4][4]?
|
On ne peut pas utiliser des tableaux comme élément de vector parce que
les tableaux sont des types sans opérateur de copie.
--
Horst
--
Lâche pas la patate!
|
|
| Back to top |
|
 |
Korchkidu Guest
|
Posted: Thu Nov 04, 2004 8:19 pm Post subject: Re: cannot convert from 'const double [4][4]' to 'MatriX ' |
|
|
Horst Kraemer wrote:
| Quote: | On ne peut pas utiliser des tableaux comme élément de vector parce que
les tableaux sont des types sans opérateur de copie.
|
Je vois. Mais imaginons que ce typedef fait parti d'une lib en C qui est
assez grande. Comment je peux faire si je veux faire ce genre de truc?
Suis-je oblige de declarer une classe qui englobe mais structure de
donnees de base?
K.
|
|
| Back to top |
|
 |
Falk Tannhäuser Guest
|
Posted: Fri Nov 05, 2004 9:27 am Post subject: Re: cannot convert from 'const double [4][4]' to 'MatriX ' |
|
|
Korchkidu wrote:
| Quote: | Horst Kraemer wrote:
On ne peut pas utiliser des tableaux comme élément de vector parceque
les tableaux sont des types sans opérateur de copie.
Je vois. Mais imaginons que ce typedef fait parti d'une lib en C qui est
assez grande. Comment je peux faire si je veux faire ce genre de truc?
Suis-je oblige de declarer une classe qui englobe mais structure de
donnees de base?
|
struct MatriX
{
double a[4][4];
};
devrait faire l'affaire. Une classe avec l'opérateur [] surchargé
rend cependant l'utilisation plus aisée :
class MatriX
{
double a[4][4];
public:
double* operator[](unsigned i) { return a[i]; }
double const* operator[](unsigned i) const { return a[i]; }
};
Falk
|
|
| Back to top |
|
 |
Twxs Guest
|
Posted: Fri Nov 05, 2004 9:28 am Post subject: Re: cannot convert from 'const double [4][4]' to 'MatriX ' |
|
|
| Quote: |
Je vois. Mais imaginons que ce typedef fait parti d'une lib en C qui est
assez grande. Comment je peux faire si je veux faire ce genre de truc?
Suis-je oblige de declarer une classe qui englobe mais structure de
donnees de base?
K.
|
ou faire un vector de pointeur vers cette structure
|
|
| Back to top |
|
 |
korchkidu Guest
|
Posted: Fri Nov 05, 2004 10:15 am Post subject: Re: cannot convert from 'const double [4][4]' to 'MatriX ' |
|
|
Falk Tannhäuser wrote:
| Quote: | Korchkidu wrote:
class MatriX
{
double a[4][4];
public:
double* operator[](unsigned i) { return a[i]; }
double const* operator[](unsigned i) const { return a[i]; }
};
|
Je croyais interieurement a une methode miracle. Je suis bon pour faire
des wrappers pour chaque type qui pose pb (tant qu'a faire, autant faire
les operateurs qui vont bien aussi....).
Merci bcp pour les reponses,
K.
|
|
| Back to top |
|
 |
Falk Tannhäuser Guest
|
Posted: Fri Nov 05, 2004 10:35 am Post subject: Re: cannot convert from 'const double [4][4]' to 'MatriX ' |
|
|
korchkidu wrote:
| Quote: | Falk Tannhäuser wrote:
class MatriX
{
double a[4][4];
public:
double* operator[](unsigned i) { return a[i]; }
double const* operator[](unsigned i) const { return a[i]; }
};
Je croyais interieurement a une methode miracle. Je suis bon pour faire
des wrappers pour chaque type qui pose pb (tant qu'a faire, autant faire
les operateurs qui vont bien aussi....).
|
Si tu as beaucoup de matrices avec des types ou dimensions différent(e)s,
pourquoi pas faire un template :
template<typename T, unsigned Rows, unsigned Columns = Rows>
class MatriX
{
T data[Rows][Columns];
public:
// Constructeur(s), si nécessaire ?
T* operator[](unsigned i) { return data[i]; }
T const* operator[](unsigned i) const { return data[i]; }
};
...
MatriX<double, 4> m1;
MatriX<int, 3, 7> m2;
Falk
|
|
| Back to top |
|
 |
|