L'Expression doit avoir pointeur vers un objet de type
Je suis en train d'écrire une matrice de programme et suis en train d'essayer de multiplier un point et d'une matrice. Je reçois un message d'erreur sur mes objets(suite et P) "Expression doit avoir pointeur vers un objet de type" dans cette fonction:
//Point Class functions
Point Matrix44::operator*(const Point & P){
Point result;
for (int i = 0; i < 4; i++) {
for (int k = 0; k < 4; k++) {
result.element[i][k] = 0;
for (int j = 0; j < 4; j++) {
result.element[i][k] = element[i][j] * P.element[j][k] + result.element[i][k];
}
}
}
return result;
}
Mes deux classes sont:
//Matrix class
class Point;
class Matrix44 {
private:
double element[4][4];
public:
Matrix44(void);
Matrix44 transpose(void) const;
friend istream& operator>>(istream& s, Matrix44& t);
friend ostream& operator<<(ostream& s, const Matrix44& t);
Matrix44 operator *(Matrix44 b);
Point operator*(const Point & P);
};
//Point class
class Point {
double element[4];
friend class Matrix44;
public:
Point(void) {
element[0] = element[1] = element[2] = 0;
element[3] = 1;
}
Point(double x, double y, double z){
element [0]=x;
element [1]=y;
element [2]=z;
element [3]=1;
}
};
OriginalL'auteur Nick | 2011-09-14
Vous devez vous connecter pour publier un commentaire.
Dans votre
Point
classe, vous avez laelement
membre défini comme:C'est un tableau à une dimension. Cependant, dans votre fonction, vous essayez d'y accéder comme s'il s'agissait d'un deux-dimensions tableau:
Je pense que vous avez besoin de repenser exactement comment votre de multiplication de matrice est censé fonctionner.
Je l'ai fait exactement la même chose parce que mon cerveau était sur le pilote automatique. Merci pour cette réponse
OriginalL'auteur Adam Maras
résultat.élément 1 tableau multidimensionnel. Vous êtes à l'aide de deux indices. Qui ne compilera pas. Vous devriez regarder la définition de la multiplication de matrice.
OriginalL'auteur David Nehme
Point::element
est undouble[4]
. Dans votre code, vous avezPoint result; result.element[i][k] = 0;
. Depuis l'élément n'est pas un tableau à deux dimensions, le compilateur essaie de convertir le double pour un tableau à utiliser[]
sur elle, mais elle ne peut pas. Je suppose que c'est de copier-collé du code deMatrix44 Matrix44::operator*(const Matrix44& M)
Il est toujours utile de nous dire ce qu'ligne a le problème dans votre exemple de code trop.
Aussi, la fonction aura le résultat incorrect, vous définissez
result.element[i][k]
à zéro, puis le mettre à 4 valeurs différentes. Je pense que vous vouliez ajouter au lieu de céder au plus profond de la boucle.OriginalL'auteur Mooing Duck
Vous essayez d'accéder à:
Lorsque le Point lui-même seulement ont un niveau de tableau:
OriginalL'auteur brain
même message d'erreur peut apparaître, de façon trompeuse, si vous pointez sur une structure qui n'est pas accessible à la source, comme,
en-tête.h
définir struct myStruct;
source1.c
inclure l'en-tête.h
source2.c
inclure l'en-tête.h
si c'est le cas, vous obtenez ce arror avec la ligne"
u_int8_t * ptr2Struct = &structX;
OriginalL'auteur Shoresh