web-dev-qa-db-fra.com

Référence non définie C++ à WinMain @ 16 (Code :: Blocks)

J'apprends le C++ avec Code :: Blocks, et chaque fois que j'essaie de créer une nouvelle classe, je reçois un message d'erreur disant:

undefined reference to `WinMain@16'

Voici le code que j'ai utilisé:

Classe principale

#include "Lime.h"
#include <iostream>
using namespace std;
int main()
{
    Lime lime;
    return 0;
}

Classe de chaux (.ccp):

#include "Lime.h"
#include <iostream>
using namespace std;
Lime::Lime()
{
    cout<<"Hi!";
}

En-tête de chaux (.h):

#ifndef Lime_H
#define Lime_H
class Lime
{
    public:
        Lime();
};
#endif

Si quelqu'un sait comment y remédier, s'il vous plaît, dites-le moi!

5
Atom

Essayez ceci: Settings-> Compiler, cliquez sur l'onglet Build options, cochez la case correspondante. 

Ajouter explicitement le répertoire du fichier en cours de compilation aux répertoires de recherche du compilateur

P.S. 

Lorsque vous créez une nouvelle classe, dans la section File policy, cochez les cases correspondantes.

  • Ajouter un chemin au projet

  • L'en-tête et le fichier d'implémentation doivent être dans le même dossier

Cependant, faitesPASselect 

Utiliser le chemin relatif

9
Milo Lu

Je viens d'avoir le même problème avec le exact avec les tutoriels exact même. 

Comment résoudre ce problème? J'ai constaté que le redémarrage de CodeBlocks supprime cette erreur. Cela n'a rien à voir avec la façon dont vous avez créé les fichiers ni avec votre syntaxe. Un redémarrage fait l'affaire.

Pourquoi cela se produit-il? Si je devais me lancer dans une conjecture sauvage, je penserais que CodeBlocks crée effectivement les fichiers en-tête/cpp, mais ne les relie pas à votre projet de manière à les rendre utilisables (bien que cela vous demande de les lier au projet après les avoir créés). C'est une supposition.

Je comprends que certaines personnes ont fait des commentaires à ce sujet en disant que vous créez une application console Windows à interface graphique plutôt qu'une application console, mais ce n'est pas le cas. Moi aussi, je créais une application console simple, comme l'explique Bucky dans les vidéos. 

9
user3308043

On dirait que vous construisez une application Windows plutôt qu'une application console. Par conséquent, vous avez besoin d’une fonction WinMain en tant que point d’entrée du programme plutôt que d'une main.

Je ne connais pas très bien CodeBlocks, mais quelque part dans les paramètres du projet, un paramètre vous permettra de spécifier le sous-système dans lequel votre programme est exécuté. Il est probablement dit "Windows", et l'une des options devrait être "Console", afin que vous puissiez le changer si vous voulez vraiment une application console. À en juger par le fait que vous utilisez cout, je soupçonne qu'une application de console est ce que vous voulez. Si c'est le cas, vous pouvez laisser main comme point d'entrée.

Vous pouvez également opter pour une application console lorsque vous créez un nouveau projet. Cette capture d'écran et le texte devraient aider.

REMARQUE: Je viens d'en vérifier un peu plus et dans le Project/target option, vous pouvez aller à l'onglet "Construire des cibles" et voir le sous-système pour lequel vous construisez. Cela s'appelle "Type" sur l'onglet, et l'une des options du menu déroulant sera "Application console".

2
Sean

Allez à "Project" --> "Build Options . . ." dans la barre de menu 
Allez à l'onglet "Linker Settings" 
Dans le panneau "Link libraries", cliquez sur "Add" 
Écrivez ceci dans le prochain champ: mingw32;libSDL.a;libSDLmain.a
Allez à l'onglet "Search directories" --> "Linker" 
Ajoutez vos dossiers de bibliothèque MinGW ici! Bonne chance!!

2
Saleh

J'ai déjà rencontré les problèmes auparavant, ma solution est de créer un projet si vous avez beaucoup de fichiers qui incluent le fichier tête. De cette façon, lorsque vous codez #include "Burrito.h", l'éditeur recherchera le fichier de tête dans votre projet. Spécialement pour l'éditeur Dev-cpp.

0
user3567012

J'ai résolu ce problème en ouvrant la boîte de dialogue des paramètres du compilateur et en cliquant simplement sur OK. Rien n'a changé. Et ça marche vraiment!

Mais si vous ajoutez à nouveau une nouvelle classe, ce problème se répète. Donc, ouvrez/fermez la boîte de dialogue des paramètres chaque fois que vous créez une nouvelle classe.

0

Essayez ceci: Paramètres-> Compilateur, cliquez sur l'onglet Options de génération, cochez la case.

Ajouter explicitement le répertoire du fichier en cours de compilation aux répertoires de recherche du compilateur

je l'ai fait et je travaille parfaitement maintenant

0
chirag

Correction: référence non définie à `WinMain @ 16 'ou référence non définie à' nom-classe :: nom-classe () 'dans codeblocks Erreur dans CodeBlocks

J'ai eu le même problème. En fait, c'était très facile à réparer. Sur Menu aller à

projet -> option de construction Cochez la case Demandez à g ++ de respecter la norme de langage C++ 11 ISO C++ [-std = c ++ 11 ]
puis cliquez sur ok pour générer et exécuter votre projet [F9]. cliquez ici pour voir l'image de capture d'écran. Correction de blocs de code de fichiers de classe distincts

0
Wahid

Ce problème m'est apparu car "main.cpp" n'était pas inclus dans le projet. Si vous voyez à nouveau cette erreur, assurez-vous que tous les fichiers sont inclus dans votre projet.

0
Revnic Robert-Nick

c'est très simple et a fonctionné pour moi ... tout ce que vous avez à faire est de sélectionner "ouvrir un projet existant" qui apparaît dans l'onglet Démarrer une fois que vous avez ouvert des blocs de code et que vous choisissez ensuite (le nom de votre projet) .cbp ... le fichier programme ouvrira vos projets ainsi que les fichiers .h et .cpp du nom de la classe ... que vous construirez et exécuterez ... et voilà votre code fonctionnera très bien ..