Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2756 connectés 

 


Dernière réponse
Sujet : c++ : "illegal pure syntax, must be '= 0'"
gilou OK c'est clair.
A+,

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
gilou OK c'est clair.
A+,
oliv5 Bah, t'as pas suivi : ce que je te dis c'est que le problème vient de la. VC++ attend qu'il tape methodeX()=0 car c'est la seule chose qu'il peut "initialiser" directement. Il ne peut pas ecrire  
class X
{
     public :
        int y = 2;   //bam, erreur de compilation.  
                     //il attendait un nom de methode
}
 
c'est-y pas clair ?
gilou Oui, mais sa classe class FicSI  est pas pure virtual, ou alors le code poste est pas celui utilise.
A+,
oliv5 Ce message d'erreur vient du fait que quand tu declare une classe abstraite. c'est bizarre, mais si tu veux faire une classe abstraite, tu dois ecrire :
class X
{
   type methode X(...) = 0;
}
 
Dans la doc MSDN, c'est ce qu'il appellent des classes "pure virtual". Il suffit d'écrire "=0" apres une methode pour que la classe soit abstraite. c'est bizarre, mais ca marche vraiment.
 
 
Tenez, voila un extrait de cette doc :
 
"In the following program, draw() is a pure virtual function defined in the abstract class Shape. You cannot declare Shape objects. Shape acts as a base class for Rectangle and Circle. Rectangle and Circle provide definitions for draw(), so you can declare instances of those classes and call draw() for them.
 
// Example of a virtual function and abstract classes
#include <iostream.h>
 
class Shape
{
public:
   virtual void draw() = 0;
};
 
class Rectangle: public Shape
{
public:
   void draw();
};
 
class Circle : public Shape
{
public:
   void draw();
};
"
c'est visual 6 de chez gro$oft !
c clair moi aussi j'ai triuvé ca bizarre ! d'où ce post (vive les messages d'erreur très explicites ...)
minusplus mr_mat > c'est quoi comme compilateur qui te met cette erreur ? passke "illegal pure syntax, must be '= 0'" c'est hyper bizarre...
minusplus mr_mat > c'est quoi comme compilateur qui te met cette erreur ? passke "illegal pure syntax, must be '= 0'" c'est hyper bizarre...
minusplus 1) si tu fais ddu C++ autant utiliser les opérateurs appropriés : fichier >> nb;
 
2) si il y a marqué 3.0000 dans ton fichier, il faut que tu lises un float et que tu le 'cast' en int .
 
3) using namespace std : ça dépende de ton compilo je crois mais gcc s'en passe. ça sert à rentrer dans l'espace de  nommage de la bibliothèque standard.
 
4) appelle bien g++ et pas gcc et met les bonnes extensions à tes fichiers (.cc ou .C ou .cpp ou voir man g++)
DuffBeer Je vais créer un nouveau topic, ça sera plus clair (et j'aurais peut-être plus de réponses).
DuffBeer Je voudrais poser une question qui n'a pas de rapport avec le sujet mais je vois que tu utilises fstream.
J'arrive pas a bien l'utiliser, j'explique :
 
mon fichier généré par Matlab :
    3.00000
    1.00000
    3.80000
    0.00290
    0.00500 ...
 
le code C++ pour le lire :
int nb;
double lg;
fstream * fichier;
fstream = new fstream("donnees",ios::in);
fichier->getline(reinterpret_cast(&nb), sizeof(nb));
fichier->getline(reinterpret_cast(&lg), sizeof(lg));
fichier->close();
 
Je veux en fait récupérer les valeurs de mon fichier et les convertir dans un type donnée. Mais quand je regarde les valeurs récupérées, c'est du style 256789630.  :ouch:  
What is the problem ?  :sweat:  
 
PS : A quoi sert using namespace std ?
      A la compile, il ne trouve pas les fichiers en-tête iostream et fstream. Je suis obligé de lui spécifié le chemin .../g++-3 ?  :gun:

 

[edit]--Message édité par DuffBeer--[/edit]

ragefan Initialise ton memebre dans le constructeur de la classe au lieu de le faire a la barbare avec sa declaration , ca fait plus propre ! et ca marche !
oliv5 le mieux c'est la variale static commune a toute ta classe. c'est plus propre.
verdoux En plus il se sert de NB_ENREG pour des tableaux membres.
Donc là il faudrait plutôt un:
enum {NB_ENREG = 100};
gilou

Verdoux a écrit a écrit :

Si le membre n'est pas statique on ne peut pas l'initialiser comme ça.
Déclare le statique.
 
Ou alors initialise le avec le constructeur:
FicSI(const char * fichier): NB_ENREG(100) { blabla ....




 
Surtout que comme c'est une constante, elle est logiquement globale a toute les instances de la classe.
A+,

Amadeus Il a raison les globales c plus de la methodologi C que C++
 

mr_mat a écrit a écrit :

pourquoi ? c'est deconseillé ??



pourquoi ? c'est deconseillé ??
verdoux

mr_mat a écrit a écrit :

je pense que je vais declarer la constante en global




Ton prof risque de pas aimer.

je pense que je vais declarer la constante en global
oliv5 C'est simple, tu ne peux pas déclarer une variable dans une classe en lui attribuant directement une valeur. Il faut le mettre dans le constructeur.
D'un cote, c'est vrai que c'est chiant, mais au moins les initialisations sont toutes au même endroit.
okay !
pour l'anecdote, le .h a été écrit par mon prof de c++
verdoux Si le membre n'est pas statique on ne peut pas l'initialiser comme ça.
Déclare le statique.
 
Ou alors initialise le avec le constructeur:
FicSI(const char * fichier): NB_ENREG(100) { blabla ....
Je met que le .h
 
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
 
// definition des types nécessaires
 
struct SI_Enreg  
{        // description d'un enregistrement du fichier
 string index;    // la clé
 //. . . . .     // le reste de l'enregistrement
 
};
 
enum SI_STATUS {SI_NOK,SI_OK}; // Statut des opérations
 
struct SI_Index  
{        // description d'un poste du tableau des index
 string index;    // la clé
 long numero;    // le numero d'enregistrement correspondant
};
 
 
 
 
// classe FicSI
 
class FicSI  
{
 
private:
        /*c'est là que ca foire !!*/
        const int NB_ENREG = 100;  // nombre maxi d'enregistrements du fichier (on a choisi 100)
 
 fstream fp;      // File pointeur du fichier des données
 string nom_fic;     // pour mémoriser le nom du fichier logique
 bool ouvert;     // pour connaître l'état du fichier logique
 SI_Index tab_idx [NB_ENREG]; // tableau des index
 bool tab_map [NB_ENREG];  // mapping des emplacements libres ou occupés
 
public:
 FicSI(const char * fichier);
 ~FicSI();
 void fermer();
 SI_STATUS ajout(SI_Enreg elem);
 SI_STATUS lire(SI_Enreg & elem, string cle);
 SI_STATUS supprimer(string cle);
 SI_STATUS reecrire(SI_Enreg elem);
 
private:
 bool chercher(string cle, int & rang);
 bool positionner(long numero);
};
 
 
si ca peut vous aider, je suis sous visual 6.
verdoux Montre ton code.
erreur de compilation :
illegal pure syntax, must be '= 0'
alors que je declare une constante toute conne dans une classe (en private).
 
comment se fait il ?

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)