Découper son projet à l'aide de fichiers .h
Le problème exposé dans ce sujet a été résolu.
Bonjour,
Je cherche à comprendre comment fonctionnent les fichiers .h.
J’ai lu ce sujet mais malgré tout, le code ne compile pas.
Le code est très simple, il consiste à afficher « hello ».
Pour le compiler, il faut utiliser la commande make.
Comment corriger cette erreur de compilation ?
myprint.h:4:14: error: variable or field ‘myprint’ declared void
makefile
all: myprint.o main.cpp
g++ myprint.o main.cpp -o main
myprint.o: myprint.cpp
g++ -c myprint.cpp
clean:
rm *.o
main.cpp
#include <iostream>
#include <string>
#include "myprint.h"
using std::cout;
using std::endl;
int main()
{
myprint("hello");
return EXIT_SUCCESS;
}
myprint.cpp
#include <string>
#include "myprint.h"
void myprint(std::string s) {
cout << s << endl;
}
myprint.h
#ifndef MYPRINT_H
#define MYPRINT_H
#include <string>
void myprint(std::string s);
#endif
Il me semble que c’est ta commande de départ qui est invalide, essaye : g++ -o main main.cpp myprint.cpp
(sans parler des petites rectifications nécessaires du fichier header).
Merci, en effet ça fonctionne à présent.
En fait, j’incluais les bibliothèques standards là où ce n’était pas nécessaire.
Code corrigé :
makefile
all: myprint.o main.cpp
g++ -o main main.cpp myprint.cpp
myprint.o: myprint.cpp
g++ -c myprint.cpp
clean:
rm *.o
main.cpp
#include "myprint.h"
int main()
{
myprint("hello");
return EXIT_SUCCESS;
}
myprint.h
#ifndef MYPRINT_H
#define MYPRINT_H
#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;
void myprint(string);
#endif
myprint.cpp
#include "myprint.h"
void myprint(string s) {
cout << s << endl;
}
Dans ce cas particulier, elle ne sont indispensables que dans le fichier myprint.h.
Vu que std::cout
et std::endl
ne sont utilisés que par ton unité de compilation myprint.cpp
, tu n’as pas besoin de les inclure dans le .h
. Ce dernier n’a besoin que de <string>
. Tu peux mettre <iostream>
dans myprint.cpp
directement.
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte