Erreur de compilation!

Résolu/Fermé
ihssane it9ane Messages postés 55 Date d'inscription vendredi 30 janvier 2009 Statut Membre Dernière intervention 5 août 2009 - 27 févr. 2009 à 23:44
ihssane it9ane Messages postés 55 Date d'inscription vendredi 30 janvier 2009 Statut Membre Dernière intervention 5 août 2009 - 28 févr. 2009 à 00:22
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 mardi 6 juin 2006 Statut Membre Dernière intervention 28 septembre 2010 59
27 févr. 2009 à 23:48
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 vendredi 30 janvier 2009 Statut Membre Dernière intervention 5 août 2009
27 févr. 2009 à 23:52
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 mardi 6 juin 2006 Statut Membre Dernière intervention 28 septembre 2010 59 > ihssane it9ane Messages postés 55 Date d'inscription vendredi 30 janvier 2009 Statut Membre Dernière intervention 5 août 2009
27 févr. 2009 à 23:56
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 vendredi 30 janvier 2009 Statut Membre Dernière intervention 5 août 2009 > sebastien61 Messages postés 495 Date d'inscription mardi 6 juin 2006 Statut Membre Dernière intervention 28 septembre 2010
28 févr. 2009 à 00:00
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 mardi 6 juin 2006 Statut Membre Dernière intervention 28 septembre 2010 59
28 févr. 2009 à 00:02
De rien, bon courage à toi !
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
28 févr. 2009 à 00:02
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 mardi 6 juin 2006 Statut Membre Dernière intervention 28 septembre 2010 59
28 févr. 2009 à 00:08
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842 > sebastien61 Messages postés 495 Date d'inscription mardi 6 juin 2006 Statut Membre Dernière intervention 28 septembre 2010
28 févr. 2009 à 00:16
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 vendredi 30 janvier 2009 Statut Membre Dernière intervention 5 août 2009
28 févr. 2009 à 00:14
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842 > ihssane it9ane Messages postés 55 Date d'inscription vendredi 30 janvier 2009 Statut Membre Dernière intervention 5 août 2009
28 févr. 2009 à 00:20
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 vendredi 30 janvier 2009 Statut Membre Dernière intervention 5 août 2009 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
28 févr. 2009 à 00:22
merci
0