Erreur de compilation!

Résolu
ihssane it9ane Messages postés 55 Date d'inscription   Statut Membre Dernière intervention   -  
ihssane it9ane Messages postés 55 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
j travaille avec dev c++ une erreur de compilation que j'ai pas compris " new types may not be defined in a return type "
l'erreur est dans la ligne "imat= new char[ strlen(i)+1];"
merci.

3 réponses

sebastien61 Messages postés 495 Date d'inscription   Statut Membre Dernière intervention   59
 
Salut,

est-ce que ton objet imat a été déclaré ? Est-ce que son type est (re-)connu par le compilateur ?
0
ihssane it9ane Messages postés 55 Date d'inscription   Statut Membre Dernière intervention  
 
voici mon code
#include<conio.h>
#include<string.h>
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
class voiture
{
char * imat;
char * mod;
public:
voiture(char*,char*);
voiture(voiture&);
void afficher();
}

voiture::voiture(char *a,char *b)
{ imat= new char[strlen(a)+1];
mod= new char[strlen(b)+1];
strcpy(imat,a);
strcpy(mod,b);
}

voiture :: voiture(voiture&v)
{ imat= new char[strlen(v.imat)+1];
mod= new char[strlen(v.mod)+1];
strcpy(imat,v.imat);
strcpy(mod,v.mod);
}
void voiture :: afficher()
{
cout<<"imat"<<"\t \t \t " <<"mod"<<"\n";
cout<<imat<<"\t \t \t " <<mod<<"\n";
}
main()
{voiture v1("999","bmw");
voiture v2("9889","toyota");
}
0
sebastien61 Messages postés 495 Date d'inscription   Statut Membre Dernière intervention   59 > ihssane it9ane Messages postés 55 Date d'inscription   Statut Membre Dernière intervention  
 
Tu as dû oublier un point virgule juste après avoir fermé ta classe dans ton fichier *.h. Tu dois avoir :
#include<conio.h>
#include<string.h>
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
class voiture
{
char * imat;
char * mod;
public:
voiture(char*,char*);
voiture(voiture&);
void afficher();
} ;


J'espère que ça va t'aider mais il me semble que ce genre de petite erreur est assez pénible et provoque des erreurs bisarres...
0
ihssane it9ane Messages postés 55 Date d'inscription   Statut Membre Dernière intervention   > sebastien61 Messages postés 495 Date d'inscription   Statut Membre Dernière intervention  
 
oui merci je viens de de trouver l'erreur .merci beaucoup.
ces mes premieres tp de programmation.
0
sebastien61 Messages postés 495 Date d'inscription   Statut Membre Dernière intervention   59
 
De rien, bon courage à toi !
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Ah oui, je comprends pourquoi le compilateur crie ^^.
Déjà, il faut éviter le mélange C/C++.
En C++ évite les char*, et on utilise plus volontiers la classe String. Donc, plus besoin de strcpy et compagnie.
A la fin de la définition de ta classe, effectivement, tu as oublié un point-virgule.
Le prototype de main est int main(void); et renvoie 0 lorsque tout va bien.

Et enfin, il vaut mieux inclure iostream et non iostream.h pour importer le tout dans le namespace std.

Reposte le code une fois toutes ses erreurs corrigées si ça ne compile toujours pas.

Cdlt
0
sebastien61 Messages postés 495 Date d'inscription   Statut Membre Dernière intervention   59
 
Tu peux utiliser un new char en C++, t'es pas obligé de faire un malloc. Utiliser les char est également possible en C++.
Mais c'est vrai qu'avec des std::string au lieu de char*, tu t'embêterais probablement moins...
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > sebastien61 Messages postés 495 Date d'inscription   Statut Membre Dernière intervention  
 
Oui, tu peux utiliser les char en C++. Mais, autant utiliser les String quand c'est possible. Cela est mieux gérer en interne.
0
ihssane it9ane Messages postés 55 Date d'inscription   Statut Membre Dernière intervention  
 
oui j'ai ajouté le point virgule et ça marche.
pour le main ça marche sans mettre le type.
pour le iostream sans .h la compilation a reussi mais il y a un message
`cout' undeclared (first use this function) .
enfin merci pour l'interet que vous avez accordé a mon message.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > ihssane it9ane Messages postés 55 Date d'inscription   Statut Membre Dernière intervention  
 
pour le main ça marche sans mettre le type.
Oui, mais cela ne respecte pas la norme. Si tu veux respecter la norme, alors faut mettre int devant ;).

`cout' undeclared (first use this function) .
Oui, en incluant iostream, cout se trouve dans l'espace de nom std. Il faut donc faire std::cout.
Ou alors, mettre using namespace std; en début. Ce qui te permettra d'utiliser cout simplement. Mais à ne pas faire dans les .h, enfin, ce n'est pas une bonne pratique.
0
ihssane it9ane Messages postés 55 Date d'inscription   Statut Membre Dernière intervention   > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
merci
0