2012-10-17 4 views
0

Je suis nouveau en C++ et l'idée de fichiers d'en-tête définissant des classes est étrangère à moi. J'ai le fichier d'en-tête suivant pour une classe Polynomial qui me donne beaucoup d'erreurs.std lib objets comme types de retour et les paramètres de fonction

#ifndef POLYNOMIAL_H 
#define POLYNOMIAL_H 

class Polynomial { 
public: 
    Polynomial(std::vector <int>&); 
    Polynomial(const Polynomial& orig); 
    virtual ~Polynomial(); 

    std::vector <int> getCoeffs(); 
    Polynomial getIntegral(int, int, int); 
    Polynomial getDerivative(int); 
    std::string toString(); 

    void integrate(int, int); 
    void derive(); 
private: 
    std::vector<int> coeffs; 
}; 

#endif /* POLYNOMIAL_H */ 

Toutes les méthodes de classe qui comprennent quelque chose de la lib standard dans leur définition de type de retour me donne l'erreur: « vecteur » (ou « string ») dans l'espace de noms « std » ne nomme pas un type

Le constructeur qui prend un vecteur comme paramètre donne l'erreur: attendu ')' avant le jeton '<'. Je suis sûr que c'est quelque chose de très évident, mais quoi que ce soit les tutoriels que j'ai fait ne sont pas allés si loin dans les classes et les définitions de classe pour trouver un exemple comme celui-ci.

+1

Vous devez inclure l'en-tête approprié d'utiliser la classe. – chris

Répondre

2

std::vector est défini dans l'en-tête vecteur. Vous devez ajouter l'instruction

#include <vector> 

en haut de votre fichier d'en-tête. Cela provoque le préprocesseur à (effectivement) coller le contenu de ce fichier à la place de l'instruction #include. Ainsi, le compilateur sait à quoi fait référence le type std::vector dans votre définition de classe.

La même chose s'applique à std::string, qui est, à son tour, définie dans l'en-tête chaîne. Donc, ajoutez #include <string> pour cet en-tête.

cppreference.com est une bonne référence pour rechercher les types et leurs en-têtes respectifs; c'est aussi une bonne référence en ligne pour C++.

C'est ce que votre fichier d'en-tête devrait ressembler à:

#ifndef POLYNOMIAL_H 
#define POLYNOMIAL_H 

#include <string> 
#include <vector> 

class Polynomial { 
    ... 
}; 

#endif /* POLYNOMIAL_H */ 
+0

Merci, je suis parfois confus quand il est approprié d'inclure des choses différentes; par exemple, pourquoi n'incluez-vous généralement pas les fichiers cpp mais vous incluez les fichiers d'en-tête? – clementine

Questions connexes