2010-12-07 66 views
3

Quelle est la syntaxe correcte pour l'implémentation de la fonction dans un fichier séparé? Par exemple:Implémentation de la fonction dans un fichier séparé

foo.h

int Multiply(const int Number); 

foo.cpp

#include "foo.h" 

int Multiply(const int Number) 
{ 
    return Number * 2; 
} 

Je vois cela utilisé beaucoup, mais quand je l'essayer je reçois une erreur d'avoir à faire avec une fonction main() manquante. Je reçois l'erreur même lorsque j'essaie de compiler le code de travail.

+1

Vous auriez dû mentionner que ceci est supposé être une bibliothèque sans main. Modifiez simplement le type de configuration de votre projet, si vous utilisez Visual Studio, dans une bibliothèque. –

Répondre

7

En gros, vous devez avoir une fonction main() dans l'un de vos fichiers C++ que vous compilez.

Comme le compilateur dit, vous avez juste besoin d'avoir une méthode main() à l'intérieur de votre foo.cpp, comme ceci:

#include "foo.h" 
#include <iostream> 

using namespace std; 

int Multiply(const int Number) 
{ 
    return Number * 2; 
} 

int main() { 
    // your "main" program implementation goes here 
    cout << Multiply(3) << endl; 
    return 0; 
} 

Ou vous pouvez séparer votre fonction principale dans un fichier différent, comme si (omettre le bloc principal() dans foo.cpp si vous avez l'intention de le faire):

main.cpp 

#include "foo.h" 
#include <iostream> 

using namespace std; 

int main() { 
    cout << Multiply(3) << endl; 
    return 0; 
} 

compiler ensuite comme

g++ main.cpp foo.cpp 
+0

Est-ce que la fonction 'main' doit retourner quelque chose? De plus, je ne vois pas 'main' n'importe où dans mon fichier' apstring.cpp' (qui complimente 'apstring.h'). – Maxpm

+0

Habituellement, ce que les gens font est la fonction principale séparée et les fonctions "d'aide". Voir mon édition –

+0

@SiGanteng: Pourquoi est-ce que dans main.cpp "foo.h" est inclus et non "foo.cpp". Parce que foo.cpp est ce qui a la définition de la fonction et il comprend aussi foo.h.So pourquoi ne pas inclure "foo.cpp" dans main.cpp – clarkson

2

Chaque programme en C++ est une collection d'une ou de plusieurs unités de traduction , également appelés fichiers sources. Une fois ces fichiers compilés, l'éditeur de liens recherche le point d'entrée de votre programme, la fonction int main(). Comme il ne parvient pas à le trouver, il vous donne une erreur. N'oubliez pas que la construction du programme génère un fichier exécutable. Un fichier exécutable sans point d'entrée est un non-sens.

+0

Ceci est pour un cadre, cependant; ce n'est pas supposé avoir un exécutable autonome. – Maxpm

+0

Ensuite, il devrait être construit comme un fichier .lib ou .dll (dans Windows). Bien qu'une DLL puisse également avoir un point d'entrée –