2011-04-22 4 views
1

Je reçois l'erreur: « undefined reference to 'yClass :: yClass()'Pourquoi une erreur de l'éditeur de liens se produit-elle?

lors d'une tentative de créer une instance de la classe principale Quelqu'un sait pourquoi

tête.?

#ifndef header_h 
#define header_h 

#include <cstdlib> 
#include <iostream> 
using namespace std; 

class yClass 
{ 
     public: 
      void one(); 
      void two(int,int); 
      yClass(); 

     private: 
       int a; 
       int b; 
}; 

#endif 

principale:

#include "header.h" 

int main() 
{ 
    yClass a; 

    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 
+0

À quoi ressemble votre header.h? – rzetterberg

Répondre

8

Vous avez déclaré le constructeur de yClass, mais vous ne l'avez pas défini. Ou, si vous l'avez défini dans un autre fichier (c'est-à-dire le fichier .cpp qui correspond à "header.h"), vous ne l'avez pas lié.

Le constructeur est utilisé lorsque l'objet dans main est initialisé, sa définition doit donc être présente. En revanche, les méthodes «un» et «deux» ne sont jamais appelées, de sorte que les définitions ne sont pas réellement requises.

Une solution simple pour avoir jamais défini le constructeur est de définir dans la définition de classe:

struct yClass { 
    yClass() : a(), b() {} 

private: 
    int a, b; 
}; 

Si le problème est que vous avez défini le constructeur, mais pas lié à la définition, alors vous devez ajouter l'autre unité de traduction ("le fichier .cpp") à votre makefile, projet, ligne de commande, etc.

1

Parce que vous déclarez le constructeur (et d'autres fonctions pour yClass) mais ne les implémentez pas.

0

Où avez-vous défini réellement yClass? À moins que vous
#include "yclass.cpp
ou de lier dans une bibliothèque qui contient yclass, l'inclusion de l'en-tête n'est pas suffisante.

+2

Ne pas # inclure les fichiers ".cpp". –

Questions connexes