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

  FORUM HardWare.fr
  Programmation

  c++ : "illegal pure syntax, must be '= 0'"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

c++ : "illegal pure syntax, must be '= 0'"

n°34612
Profil sup​primé
Posté le 27-05-2001 à 16:43:52  answer
 

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 ?

mood
Publicité
Posté le 27-05-2001 à 16:43:52  profilanswer
 

n°34615
verdoux
And I'm still waiting
Posté le 27-05-2001 à 16:57:18  profilanswer
 

Montre ton code.

n°34617
Profil sup​primé
Posté le 27-05-2001 à 17:02:03  answer
 

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.

n°34619
verdoux
And I'm still waiting
Posté le 27-05-2001 à 17:08:50  profilanswer
 

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 ....

n°34620
Profil sup​primé
Posté le 27-05-2001 à 17:11:58  answer
 

okay !
pour l'anecdote, le .h a été écrit par mon prof de c++

n°34621
oliv5
Pourquoi ? Parce que !
Posté le 27-05-2001 à 17:12:53  profilanswer
 

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.

n°34623
Profil sup​primé
Posté le 27-05-2001 à 17:15:07  answer
 

je pense que je vais declarer la constante en global

n°34624
verdoux
And I'm still waiting
Posté le 27-05-2001 à 17:21:01  profilanswer
 

mr_mat a écrit a écrit :

je pense que je vais declarer la constante en global




Ton prof risque de pas aimer.

n°34626
Profil sup​primé
Posté le 27-05-2001 à 17:22:50  answer
 

pourquoi ? c'est deconseillé ??

n°34628
Amadeus
Posté le 27-05-2001 à 17:34:41  profilanswer
 

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

mr_mat a écrit a écrit :

pourquoi ? c'est deconseillé ??



mood
Publicité
Posté le 27-05-2001 à 17:34:41  profilanswer
 

n°34642
gilou
Modérateur
Modzilla
Posté le 27-05-2001 à 20:22:48  profilanswer
 

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°34643
verdoux
And I'm still waiting
Posté le 27-05-2001 à 20:37:15  profilanswer
 

En plus il se sert de NB_ENREG pour des tableaux membres.
Donc là il faudrait plutôt un:
enum {NB_ENREG = 100};

n°34652
oliv5
Pourquoi ? Parce que !
Posté le 27-05-2001 à 22:40:30  profilanswer
 

le mieux c'est la variale static commune a toute ta classe. c'est plus propre.

n°34670
ragefan
Posté le 28-05-2001 à 08:32:14  profilanswer
 

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 !

n°34674
DuffBeer
Posté le 28-05-2001 à 09:39:06  profilanswer
 

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]

n°34679
DuffBeer
Posté le 28-05-2001 à 09:48:34  profilanswer
 

Je vais créer un nouveau topic, ça sera plus clair (et j'aurais peut-être plus de réponses).

n°34681
minusplus
Posté le 28-05-2001 à 09:50:16  profilanswer
 

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++)

n°34684
minusplus
Posté le 28-05-2001 à 09:52:41  profilanswer
 

mr_mat > c'est quoi comme compilateur qui te met cette erreur ? passke "illegal pure syntax, must be '= 0'" c'est hyper bizarre...

n°34686
minusplus
Posté le 28-05-2001 à 09:52:44  profilanswer
 

mr_mat > c'est quoi comme compilateur qui te met cette erreur ? passke "illegal pure syntax, must be '= 0'" c'est hyper bizarre...

n°34944
Profil sup​primé
Posté le 28-05-2001 à 18:35:45  answer
 

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 ...)

n°35010
oliv5
Pourquoi ? Parce que !
Posté le 29-05-2001 à 01:09:14  profilanswer
 

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();
};
"

n°35017
gilou
Modérateur
Modzilla
Posté le 29-05-2001 à 01:24:00  profilanswer
 

Oui, mais sa classe class FicSI  est pas pure virtual, ou alors le code poste est pas celui utilise.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°35021
oliv5
Pourquoi ? Parce que !
Posté le 29-05-2001 à 01:32:13  profilanswer
 

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 ?

n°35023
gilou
Modérateur
Modzilla
Posté le 29-05-2001 à 01:56:56  profilanswer
 

OK c'est clair.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  c++ : "illegal pure syntax, must be '= 0'"

 

Sujets relatifs
syntax en asp/sqlerror C2071: '<Unknown>' : illegal storage class
Plus de sujets relatifs à : c++ : "illegal pure syntax, must be '= 0'"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR