Prototype pour XXX::XXX ne correspond pas tout dans la classe XXX
J'ai écrit ce code simple:
principal.h
#ifndef MAIN_H
#define MAIN_H
#include <stdio.h>
#include <iostream>
#include <vector>
#include <stdlib.h>
class Parameters
{
private:
std::string _hostname, _channel, _syslogs;
int _port;
std::vector<std::string> _list;
public:
std::string getHost() {return _hostname;}
std::string getChan() {return _channel;}
std::string getSys() {return _syslogs;}
std::vector<std::string> getList() {return _list;}
int getPort() {return _port;}
};
#endif //MAIN_H header guard
main.cpp
#include "main.h"
using namespace std;
Parameters::Parameters (int argc, char** argv){
if (argc<2 || argc>4){
fprintf(stderr,"ERROR: Invalid count of parameters\n");
exit(EXIT_FAILURE);
}
}
int main(int argc, char**argv)
{
Parameters parameters(argc,argv);
return 0;
}
Mais il ne compile pas. G++ erreur:
g++ -Wall -fexceptions -g -Wextra -Wall -c
/home/pathtoproject/main.cpp -o obj/Debug/main.o
/home/pathtoproject/main.cpp:13:1: error: prototype for
‘Parameters::Parameters(int, char**)’ does not match any in class
‘Parameters’
J'utilise G++ 4.8 (et CB 13.12 IDE).
- Toutes les fonctions de membre que vous finirez par définir, y compris les constructeurs, doivent être déclarés en tant que membres de la classe.
Vous devez vous connecter pour publier un commentaire.
Vous essayez de fournir une mise en œuvre d'un constructeur que vous n'avez pas déclaré dans le cadre de la déclaration de classe.
Vous devez ajouter cette ligne à la
public:
la section de votre classe:C'est l'absence de prototype sur lequel le compilateur se plaint. L'ajout de ce prototype sera déclarer dans le
main.h
le constructeur qui vous sont définition dans votremain.cpp
.Vous devez ajouter une déclaration du constructeur en
Parameters
:Sinon, le compilateur ne sait pas que le constructeur n'existe dans d'autres unités de traduction où seul l'en-tête est inclus. Votre constructeur doit être déclaré
public
section, de sorte qu'il peut être appelé dansmain
.