webForumDet fria alternativet

Kompilerings problem

8 svar · 617 visningar · startad av Danielkun

DanielkunMedlem sedan maj 2003358 inlägg
#1

Håller på att plugga C++ från en bok men jag får inte koden att fungera.

Hoppas nån kan hjälpa mig med problemet.

Använder Dev-C++ för att kompilera och felet jag får är detta:

[Linker error] undefined reference to `GradeBook::GradeBook(std::string'
[Linker error] undefined reference to `GradeBook::GradeBook(std::string)'
[Linker error] undefined reference to `GradeBook::getCourseName()'
[Linker error] undefined reference to `GradeBook::getCourseName()'
ld returned 1 exit status

Om nån vet vad det är, berätta gärna varför det blir fel.. Jag tycker det verkar som om linkern inte kan hitta GradeBook.cpp filen?

Här är filerna:

start.cpp

#include <iostream>
using std::cout; 
using std::endl;

#include "GradeBook.h" 

int main()
{
   GradeBook gradeBook1( "CS101 Introduction to C++ Programming" );
   GradeBook gradeBook2( "CS102 Data Structures in C++" );

   cout << "gradeBook1 created for course: " << gradeBook1.getCourseName()
      << "\ngradeBook2 created for course: " << gradeBook2.getCourseName() 
      << endl;
   return 0; 
}

GradeBook.cpp

#include <iostream>
using std::cout; 
using std::endl;

#include "GradeBook.h"

GradeBook::GradeBook( string name ){
   setCourseName( name ); 
} 

void GradeBook::setCourseName( string name ){
   courseName = name; 
} 

string GradeBook::getCourseName(){
   return courseName; 
} 

void GradeBook::displayMessage(){
   cout << "Welcome to the grade book for\n" << getCourseName() 
      << "!" << endl;
}

GradeBook.h

#include <string> 

using std::string;

class GradeBook
{
public:
   GradeBook( string );
   void setCourseName( string );
   string getCourseName(); 
   void displayMessage(); 
private:
   string courseName;
};

Daniel

drewMedlem sedan mars 2007748 inlägg
#2

Säker på att den hittar gradebook.h? Finns den i current dir? Använder du makefile?

/D

DanielkunMedlem sedan maj 2003358 inlägg
#3

Tack för svaret!

På övningen innan denna övning så var inte GradeBook.cpp och GradeBook.h separerad utan all kod i GradeBook.cpp låg i GradeBook.h och då fungerade koden utmärkt att kompilera i Dev-C++.

I väntan på svar laddade jag ner C++ .NET Express där jag test kompilerade och koden ovan fungerade utan problem. Men jag föredrar enkelheten i Dev-C++.

Jag är ganska ny så jag vet inte riktigt vad du menar med makefile.

oHLLeMedlem sedan nov. 2002225 inlägg
#4

Felet ligger i länkningen. Eftersom du har flyttat koded ifrån GradeBook.h till GradeBook.cpp så måste du kompilera GradeBook.cpp och start.cpp till o-filer och sedan länka ihop de. Nu försöker antagligen Dev-C++ bara att kompliera start.cpp till en körbar fil och då saknas implementeringen av det som finns i GradeBook.h

Exakt hur du ska göra det i Dev-C++ vet jag inte, men enklast är nog att använda en makefil. En makefil är en samling regler som säger vilka filer som beror på varandra och hur programmet ska kompileras.

Du kan läsa om Make och Makefiler på bland annat wikipedia http://en.wikipedia.org/wiki/Make

DanielkunMedlem sedan maj 2003358 inlägg
#5

Tack oHLLe!

Ska undersöka lite nogrannare om makefile.

DanielkunMedlem sedan maj 2003358 inlägg
#6

Har en fråga angående koden..

Varför behöver jag inte inkludera <string> I GradeBook.cpp??

PhorpherMedlem sedan feb. 20002 059 inlägg
#7

Danielkun skrev:

Har en fråga angående koden..

Varför behöver jag inte inkludera <string> I GradeBook.cpp??

Därför att du inkluderar den i headerfilen. Och cpp-filen inkluderar headerfilen. :)

DanielkunMedlem sedan maj 2003358 inlägg
#8

Jasså. Det var ju logiskt.

Tack! :)

DanielkunMedlem sedan maj 2003358 inlägg
#9

Nu vet jag varför det blev fel i länkningen i Dev-C++.. :r

Jag tänkte inte på att allt måste ligga i ett projekt. Jag hade endast valt "New File" och lagt till alla 3 filerna i samma katalog. Men när jag skapade ett project och importerade dem så fungerade länkningen perfekt.

Det går bra att importera GradeBook.h men det blir länkfel när man lägger till GradeBook.cpp. Så man behöver skapa ett projekt med GradeBook.cpp tilllagd för att Dev-C++ ska hitta den.

Genererad på 376 ms · cache AV · v20260730165559-full.f96bc7eb