PDA

View Full Version : [C++] problema linker


Alez22g
29-06-2010, 14:12
uso code blocks,
ho creato una classe inserendo le dichiarazioni di costruttori e funzioni membro in un file .h mentre le definizioni le ho inserite in un file .cpp.
vorrei sapere perche quando vado a compilare un programma di test della classe il file .cpp dove ci sono le implementazioni non viene caricato! me ne sono accorto mettendo le implementazioni nel file .h infatti in questo modo funziona. perchè non riesco a usare la compilazione separata?

il file header è:

#include <string>

using namespace std;

class Person
{
public:
// costruttore predefinito
Person();
//costruttore con parametri
Person(string pname, int page);
//funzione nome
string get_name() const;
//funzione età
int get_age() const;

private:
string name;
int age; // 0 se ignota
};



il file di implementazione .cpp è:

#include "PersonClass.h"

using namespace std;

Person::Person()
{
age=0;
}

Person::Person(string pname, int page)
{name=pname;
age=page;
}

string Person::get_name() const
{return name;
}

int Person::get_age() const
{return age;
}

il file di test è:

#include <iostream>
#include "PersonClass.h"

using namespace std;

int main()
{
string name;
int age;
cout<<"Inserisci il nome:";
cin>>name;
cout<<"Inserisci eta:";
cin>>age;
Person head(name, age);
cout<<"I dati inseriti sono: \n"<<"Name: "<<head.get_name()<<"\n";
cout<<"Eta: "<<head.get_age();

return 0;
}

shinya
29-06-2010, 15:07
#ifndef PERSON_H
#define PERSON_H

... include file...

#endif

fero86
29-06-2010, 15:19
se il compilatore che usi la supporta c'é anche #pragma once :p
il MinGW mi pare la supporti.