Erreur: invalid use of `this' in non-member function & `int' is not an aggregate

Signaler
Messages postés
14
Date d'inscription
mercredi 4 juin 2003
Statut
Membre
Dernière intervention
25 août 2005
-
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
-
Bonjour,

J'ai un problème avec une Classe C++, voici le tracé des erreurs :

$ make
g++ -c -O4 -W -g -Wall -o Nuage.o Nuage.cpp
Nuage.cpp:4: ISO C++ forbids defining types within return type
Nuage.cpp:4: `int' is not an aggregate type
Nuage.cpp:4: semicolon missing after declaration of `class Nuage'
Nuage.cpp: In function `int Nuage()':
Nuage.cpp:5: invalid use of `this' in non-member function
...// mêmes erreurs à toutes les lignes entre 5 et 12
Nuage.cpp:12: invalid use of `this' in non-member function
Nuage.cpp:13: warning: no return statement in function returning non-void

et voici le programme hpp :

#ifndef NUAGE_HPP
#define NUAGE_HPP


#include
#include <stdlib.h>
#include <sstream>


using namespace std;


/* La classe qui va gérer notre nuage */
class Nuage {
/* Les variables sont mises en privé:
taille: le nombre de points du nuage.
minX, minY, minZ: les minimums sur x y et z.
maxX, maxY, maxZ: les maximums sur x y et z.
myNuage: le tableau contenant les points du nuage.
*/
private:
int taille;
float minX;
float minY;
float minZ;
float maxX;
float maxY;
float maxZ;
float* myNuage;
/* Les constructeurs, méthodes et fonctions sont mis en publique. */
public:
/* Constructeur simple, il crée un nuage vide. */
Nuage();
/* Destructeur */
~Nuage(){ free(myNuage); }
/* Renvoie la valeur du point à l'indice i du tableau. */
void getPoint(int i, float p[3]);
/* Lit le Nuage à partir d'un fichier. */
void readNuage(char* fileName);

}
#endif

et voici le cpp :

#include "Nuage.hpp"


/* Constructeurs: */
Nuage::Nuage(){ // ligne 4
this->taille = 0;
this->minX = 0.0;
this->minY = 0.0;
this->minZ = 0.0;
this->maxX = 0.0;
this->maxY = 0.0;
this->maxZ = 0.0;
this->myNuage = (float*)calloc(0, sizeof(float));
}


/* Méthodes et fonctions: */
void Nuage::getPoint(int i, float p[3]){
p[0] = this->myNuage[i*3];
p[1] = this->myNuage[i*3 + 1];
p[2] = this->myNuage[i*3 + 2];
}


void Nuage::readNuage(char* fileName){
FILE* ifp = fopen(fileName,"r");
...
fclose(ifp);
}

Si quelqu'un avait une idée, merci.

(NB: j'ai une classe équivalente au nom et nombre de variables private prés et qui marche sans aucun problème.)

ToNiO
A voir également:

4 réponses

Messages postés
232
Date d'inscription
vendredi 9 janvier 2004
Statut
Membre
Dernière intervention
8 janvier 2005

Nuage.cpp:4: semicolon missing after declaration of `class Nuage'



c'est comme le port salut !
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Nuage.cpp:4: semicolon missing after declaration of `class Nuage'
=> Il manque le ; après la déclaration de la classe dans le .h
Messages postés
14
Date d'inscription
mercredi 4 juin 2003
Statut
Membre
Dernière intervention
25 août 2005

Pourquoi il fait l'erreur dans le cpp alors ?
P'tain en plus j'était sur qu'il y était dans le .hpp mais ça devait être un autre hpp du projet que j'ai regardé .
En tout cas merci ça marche :d.
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Il fait l'erreur dans le cpp car le .h est inclus dedans et comme c'est à la fin de celui-ci, il te met l'erreur à la ligne d'après pour le compilo (le début du .cpp)

en général, quand le compilo dit qu'il y a une erreur de ; à une ligne, il faut regarder loin au dessus et remonter les .h inclus.