Ciao a tutti,
Mi trovo nei problemi con la compilazione della mia prima classe divisa in 2; File .H di interfaccia e File .cpp di implementazione, potete darmi una mano a capire cosa non va?
Come IDE sto usando Dev-C++
l'IDE in fase di compilazione del main mi da questo Log:
Compiling single file...
--------
- Filename: C:\Users\Utente\Documents\File prigrammazione C++\Separazione classe da interfazzia da mai\fig03_13.cpp
- Compiler Name: TDM-GCC 4.9.2 64-bit Release
Processing C++ source file...
--------
- C++ Compiler: %BinDir0%\g++.exe
- Command: g++.exe "C:\Users\Utente\Documents\File prigrammazione C++\Separazione classe da interfazzia da mai\fig03_13.cpp" -o "C:\Users\Utente\Documents\File prigrammazione C++\Separazione classe da interfazzia da mai\fig03_13.exe" -I"%CppIncludeDir0%" -I"%CppIncludeDir1%" -I"%CppIncludeDir2%" -I"%CppIncludeDir2%\c++" -L"%LibDir0%" -L"%LibDir1%" -static-libgcc
C:\Users\Utente\AppData\Local\Temp\ccuNYHSG.o:fig03_13.cpp:(.text+0x48): undefined reference to`GradeBook::GradeBook(std::string)'
C:\Users\Utente\AppData\Local\Temp\ccuNYHSG.o:fig03_13.cpp:(.text+0x96): undefined reference to `GradeBook::GradeBook(std::string)'
C:\Users\Utente\AppData\Local\Temp\ccuNYHSG.o:fig03_13.cpp:(.text+0xbe): undefined reference to `GradeBook::getCourseName()'
C:\Users\Utente\AppData\Local\Temp\ccuNYHSG.o:fig03_13.cpp:(.text+0xfc): undefined reference to `GradeBook::getCourseName()'
collect2.exe: error: ld returned 1 exit status
Compilation results...
--------
- Errors: 1
- Warnings: 0
- Compilation Time: 1,23s
come messaggi nella lista errori invece mi da questo:
C:\Users\Utente\AppData\Local\Temp\ccuNYHSG.o fig03_13.cpp:(.text+0x48): undefined reference to `GradeBook::GradeBook(std::string)'
C:\Users\Utente\AppData\Local\Temp\ccuNYHSG.o fig03_13.cpp:(.text+0x96): undefined reference to `GradeBook::GradeBook(std::string)'
C:\Users\Utente\AppData\Local\Temp\ccuNYHSG.o fig03_13.cpp:(.text+0xbe): undefined reference to `GradeBook::getCourseName()'
C:\Users\Utente\AppData\Local\Temp\ccuNYHSG.o fig03_13.cpp:(.text+0xfc): undefined reference to `GradeBook::getCourseName()'
C:\Users\Utente\Documents\File prigrammazione C++\Separazione classe da interfazzia da mai\collect2.exe [Error] ld returned 1 exit status
Quando invece compilo il file .cpp come Log mi da
Compiling single file...
--------
- Filename: C:\Users\Utente\Documents\File prigrammazione C++\Separazione classe da interfazzia da mai\GradeBook.cpp
- Compiler Name: TDM-GCC 4.9.2 64-bit Release
Processing C++ source file...
--------
- C++ Compiler: %BinDir0%\g++.exe
- Command: g++.exe "C:\Users\Utente\Documents\File prigrammazione C++\Separazione classe da interfazzia da mai\GradeBook.cpp" -o "C:\Users\Utente\Documents\File prigrammazione C++\Separazione classe da interfazzia da mai\GradeBook.exe" -I"%CppIncludeDir0%" -I"%CppIncludeDir1%" -I"%CppIncludeDir2%" -I"%CppIncludeDir2%\c++" -L"%LibDir0%" -L"%LibDir1%" -static-libgcc
%LibDir1%\libmingw32.a(lib64_libmingw32_a-crt0_c.o): In function `main':
C:\crossdev\src\mingw-w64-v3-git\mingw-w64-crt\crt\crt0_c.c:18: undefined reference to `WinMain'
collect2.exe: error: ld returned 1 exit status
Compilation results...
--------
- Errors: 1
- Warnings: 0
- Compilation Time: 1,53s
e come errore :
C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib\libmingw32.a(lib64_libmingw32_a-crt0_c.o) In function `main':
18 C:\crossdev\src\mingw-w64-v3-git\mingw-w64-crt\crt\crt0_c.c undefined reference to `WinMain'
C:\Users\Utente\Documents\File prigrammazione C++\Separazione classe da interfazzia da mai\collect2.exe [Error] ld returned 1 exit status
Incollo di seguito anche il codice:
MAIN
/*fig3.13; fig03_13.cpp
verifica della classe GradeBook dopo la separazione della
sua interfaccia dall'implementazione*/
#include <iostream>
using std::cout;
using std::endl;
#include "GradeBook.h" //inclusione della definizione della classe GradeBook
//La funzione main inizia l'esecuzione del programma
int main()
{
// Creazione di 2 oggetti GradeBook
GradeBook gradeBook1 ("CS101 Introdation to C++ programming");
GradeBook gradeBook2 ("CS102 Data structures in C++");
//visualizza il nome iniziale del corso per ogni oggetto GradeBook
cout << "gradeBook1 created for course: " << gradeBook1.getCourseName();
cout << "\ngradeBook2 created for course: " << gradeBook2.getCourseName()
<< endl<< endl;
return 0;
}
}
Codice GradeBook.h
/* Fig 3.9 GradeBook.h
Definizione della classe gradeBook. Questo file presenta l'interfaccia
pubblica della classe GRadeBook senza rilevare l'implementazione delle
funzioni membro che sono definite nel file GradeBook.cpp*/
#include <string> // La classe grade book utilizza la classe standard string
using std::string;
// definizione della classe GradeBook
class GradeBook
{
public:
GradeBook(string);// Costruttore che inizializza courseName
void setCourseName (string);//funzione per implementare il nome del corso
string getCourseName();//funzione per leggere il nome del corso
void displayMessage(); // funzione che visualizza un messaggio
// di benvenuto
private:
string courseName; //nome del corso per questo corso
}; //fine della classe GradeBook
Codice GradeBook.cpp
/*fig3.12; fig03_12.cpp
Definizione delle funzioni membro della classe GradeBook. Questo file
contiene le implementazioni delle funzioni memebro i cui prototipi
sono deiniti in Gradebook.h*/
#include<iostream>
using std::cout;
using std::endl;
#include "GradeBook.h"//inclusione dellla definizione della classe GradeBook
//il costrutto inizializza courseName con la stringa fornita come argomento
GradeBook::GradeBook(string name)
{
setCourseName(name); //chiamata alla funzione set per inizializzare
//courseName
} // fine del costruttore
void GradeBook::setCourseName(string name)
{
courseName = name; //memorizza il nome del corso nell'oggetto
} //fine della funzione setCourseName
string GradeBook::getCourseName()
{
return courseName; // restituisce il dato membro courseNome dell'oggetto
} // fine della funzione getCourseName
// visualizza un messaggio di benvenuto all'utente della classe GRadeBook
void GradeBook::displayMessage()
{
//richiama getCourseName per leggere il nome del corso
cout << "Welcome to the grade book for: "<<getCourseName()<<"!\n"<<endl;
}// fine della funzione displayMessage