undifened reference fout (beginner)

Status
Niet open voor verdere reacties.

twanbaten

Gebruiker
Lid geworden
22 nov 2007
Berichten
9
Ik ben een x aantal dagen geleden begonnen met het lezen van een C++ boek. Hierin worden een aantal opdrachten gegeven (zonder antwoorden) die je als training kunt uitvoeren. In het laatste hoofstuk ging het over class's en het splitsen van de class van het hoofdprogramma. Ook werd behandelt hoe je de interface van een class splitst van de function definitions.

Ik heb dus onderstaand programma geschreven volgens de opdracht, maar dan krijgt ik bij compileren de volgende meldingen van de compiler (dev c++):
(de titel is inmiddels niet meer van toepassing, althans niet hier... als ik het voorbeeld bestand van het boek erbij pak krijg ik gek genoeg wel de undifined reference fouten...)

Line 14 : In file included from %path%\new.cpp
Line 19:3 : [Warning] no lewline at end of file
: In function 'int main()'
Line 20 : 'class Project' has no member named 'getProjectName'

En dit zijn dan de bijbehorende files (3 stuks):
Code:
// new.cpp

#include <iostream>

using std::cout;
using std::endl;

#include <string>

using std::string;

#include "Project.h"

int main()
{
    Project name( "Project 001", "John" );
    
    cout << name.getProjectName() << "\n" << name.getProjectUser() << endl;
    
    system("pause");
    return 0;
}

Code:
// Project.h

#include <string>

using std::string;

class Project
{
public:
   Project(string, string);
   void setProjectName(string);
   string getProcjectName(); // verbeterd naar string getProjectName();
   void setProjectUser(string);
   string getProjectUser();

private:
string projectName;
string projectUser;
};

Code:
// Project.cpp

#include <string>
using std::string;

#include "Project.h"   

   Project::Project(string name, string user)
   {
      setProjectName(name);
      setProjectUser(user);
   }
   
   void Project::setProjectName(string name)
   {
      projectName = name;
   }
   
   string Project::getProjectName()
   {
      return projectName;
   }
   
      void Project::setProjectUser(string name)
   {
      projectUser = name;
   }
   
   string Project::getProjectUser()
   {
      return projectUser;
   }

Bij gebrek aan kennis weet k zelf niet waardoor dit komt, maar zou graag wel eerst de oplossing willen voordat ik verder ga. Kan iemand mij helpen?

Alvast bedankt!

Groetjes Twan
 
Laatst bewerkt:
Hoi twanbaten,

Nu kan ik nog absoluut geen C++, dus kan ik er helemaal naast zitten, maar heeft het niks te maken met de string variabelen die je op private zet ?

Code:
private:
string projectName;
string projectUser;

Kan je ze hierdoor niet alleen maar gebruiken in de header file ?

Wat nou als je ze gewoon op public zet ?

Code:
public:
string projectName;
string projectUser;


Ik ga in de vakantie aan de slag met C++ lijkt me wel wat :D
 
Code:
class Project
{
public:
   Project(string, string);
   void setProjectName(string);
   string getPro[b]cj[/b]ectName();
   void setProjectUser(string);
   string getProjectUser();

private:
string projectName;
string projectUser;
};

Typo ;)

edit: hierdoor is de functie 'getProjectName' dus niet beschikbaar, aangezien je hem daar anders noemt.
 
Laatst bewerkt:
@revelian

bedankt voor je reactie...

Hier ligt het probleem niet. Ik heb het geprobeerd, maar het maakt geen verschil. Btw.. succes met het leren van c++, het is best leuk!:thumb:

@CoD_NL

ook jij bedankt voor je reactie...

Natuurlijk is dit de fout die hier voor problemen zorgt... dacht toch echt dat ik het meermaals had gecontroleerd, maargoed...nu dat is verbeterd (ook aangepast in orginele bericht) komen de fouten weer overeen met het probleem dat ik aanvankelijk had, namelijk de undefined reference fouten. Zie als volgt:

Code:
12 %path%\New.cpp In file included from %path%\New.cpp 
17:3 %path\Project.h [Warning] no newline at end of file  
 [Linker error] undefined reference to `Project::Project(std::string, std::string)' 
  [Linker error] undefined reference to `Project::getProjectUser()' 
  [Linker error] undefined reference to `Project::getProjectName()' 
17:3 %path%\Project.h ld returned 1 exit status

Iemand een idee??
 
Laatst bewerkt:
Hier werkt je code gewoon naar behoren hoor.

Code:
/* main.cpp */

#include <iostream>

using std::cout;
using std::endl;

#include <string>

using std::string;

#include "Project.h"

int main()
{
    Project name( "Project 001", "John" );
    
    cout << name.getProjectName() << "\n" << name.getProjectUser() << endl;
    
    system("pause");
    return 0;
}

/* project.h */

#ifndef PROJECT_H_
#define PROJECT_H_

#include <string>

using std::string;

class Project
{
public:
   Project(string, string);
   void setProjectName(string);
   string getProjectName();
   void setProjectUser(string);
   string getProjectUser();

private:
string projectName;
string projectUser;
};

#endif

/* project.cpp */

#include <string>
using std::string;

#include "Project.h"   

   Project::Project(string name, string user)
   {
      setProjectName(name);
      setProjectUser(user);
   }
   
   void Project::setProjectName(string name)
   {
      projectName = name;
   }
   
   string Project::getProjectName()
   {
      return projectName;
   }
   
      void Project::setProjectUser(string name)
   {
      projectUser = name;
   }
   
   string Project::getProjectUser()
   {
      return projectUser;
   }

(getest met DevCPP;)
 
Laatst bewerkt:
ok!? , dat zou dus zeggen dat het aan de compiler ligt of aan de standaard bibliotheek. Ik heb het namelijk ook op meerdere computers getest, maar allemaal met hetzelfde resultaat. Waaronder jouw versie.
Kun je mij daarvan uitleggen wat de volgende regels doen?

#ifndef PROJECT_H_
#define PROJECT_H_
#endif

In ieder geval fijn om te weten dat de code geen fouten in de basis bevat. Bedankt voor het testen!
 
ok!? , dat zou dus zeggen dat het aan de compiler ligt of aan de standaard bibliotheek. Ik heb het namelijk ook op meerdere computers getest, maar allemaal met hetzelfde resultaat. Waaronder jouw versie.

Welke compiler gebruik je ? Ik heb bij Borland bijvoorbeeld wel eens gehad dat het project niet wilde compileren door wat lege regels in de source. (het klinkt gek, maar het is echt waar. En dan is het lang zoeken naar wat fout is :))


Kun je mij daarvan uitleggen wat de volgende regels doen?

#ifndef PROJECT_H_
#define PROJECT_H_
#endif

In ieder geval fijn om te weten dat de code geen fouten in de basis bevat. Bedankt voor het testen!

Dat is een include guard.
 
Welke compiler gebruik je ? Ik heb bij Borland bijvoorbeeld wel eens gehad dat het project niet wilde compileren door wat lege regels in de source. (het klinkt gek, maar het is echt waar. En dan is het lang zoeken naar wat fout is )

Ik gebruik Bloodshed Dev-C++ v4.9.9.2 beta (ik kon geen stable vinden).

Welke gebruik jij dan?
 
Ik gebruik Bloodshed Dev-C++ v4.9.9.2 beta (ik kon geen stable vinden).

Welke gebruik jij dan?

hehe... dan doe je ergens toch iets fout. Ik heb jouw code daar ook mee getest en het compileerde gewoon zonder problemen. :) (maak anders eens een nieuw C++ project aan en plak gewoon de code die je al hebt.)
 
Ik heb geprobeert het in een (nieuw) project te zetten, maar dit levert geen ander resultaat op. Inmiddels ben ik verder gegaan met de opdrachten op een aangepaste manier, namelijk met alle class's gewoon ingebouwd in het hoofdprogramma, maar het zou wel prettig zijn voor de toekomst als ik dit kon verhelpen. Dus als iemand nog iets te binnen schiet waaraan dit kan liggen hoor ik het graag.

@CoD_NL

Ik denk ook dat ik iets fout doe, dat is de enige mogelijkheid. Toch is het vreemd, want ik heb het nog maar pas geinstalleerd met alleen standaard instellingen. Bovendien heb ik zo goed als alleen code bewerkt en gecompileerd (tot hiervoor ook geen projecten aangemaakt). Dus wat kan mijn fout dan uberhaupt zijn?:confused:
 
Laatst bewerkt:
Ik heb nog nooit devcpp gebruikt, maar ik herken de foute wel. Meestal wijzen ze op 1 van de volgende dingen:
  • je include je *.h file niet in je *.cpp file
  • je *.cpp file zit niet in je build path

Vermits het eerste in orde lijkt gok ik erop dat er iets fout is met hoe je een klasse gaat aanmaken. Kijk eens in je makefile? (dacht toch dat devcpp daar ook mee werkte). Staat er een verwijzing naar "Project" op de plaats waar je main wordt gecompileert?
 
Ik heb nog maar eens geprobeerd een nieuw project aan te maken en via add file de genoemde bestanden toegevoegd. Nu doet hij het wel. Dus alles is opgelost nu...

Ik had de eerste keer me bestanden naar het project gesleept en toen werkte het dus niet.

Iedereen in ieder geval bedankt voor de hulp!

*SLOTJE*
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan