Problem z plikami nagłówkowymi


(Daniel K.) #1

Otóż mam baaardzo prościutki programik składający się z 3 plików, oto i one:

osoba.h

#ifndef osoba_h

#define osoba_h


#include 


using namespace std;


class osoba {


      char nazwisko[80];

      int wiek;

public:

       void zapamietaj(const char * napis, int lata);

       void wypisz() {

            cout << "\t" << nazwisko << ", lat: " << wiek << endl;

            }


      };


#endif

osoba.cpp

#include 

#include "osoba.h"



void osoba::zapamietaj(const char * napis, int lata) {


     strcpy(nazwisko, (napis ? napis : "Anonim") );

     wiek=lata;


     }

main.cpp

#include 

using namespace std;


#include "osoba.h"


int main() {


    osoba student1, student2, profesor, pilot, moje;


    profesor.zapamietaj("Grzegorz Lewiatan", 55);

    student1.zapamietaj("Daniel Nowak", 20);

    student2.zapamietaj("Piotr Kowalski", 19);

    pilot.zapamietaj("Miroslaw Wojtas", 41);


    cout << "Dane profesora:" << endl;

    profesor.wypisz();


    cout << "Dane studenta nr 1:" << endl;

    student1.wypisz();


    cout << "Dane studenta nr 2:" << endl;

    student2.wypisz();


    cout << "Dane pilota:" << endl;

    pilot.wypisz();


    poczatek:


    cout << "Podaj swoje imie: " << endl;

    char temp[80];

    cin >> temp; 


    cout << "Podaj swoj wiek: " << endl;

    int wiek;

    cin >> wiek;


    moje.zapamietaj(temp, wiek);    

    moje.wypisz();


    cout << endl << "Chcesz zmienic swoje dane?" << endl;

    cout << "Tak(t) czy nie(n)?";

    char i;

    cin >> i;

    switch(i) {

              case 't': {

                   goto poczatek;

                   break;

                   }

              case 'n': {

                   break;

                   return 0;

                   }

              default: cout << "Zly wybor"; break;

              }    

    system("pause");

}

Podczas próby kompilacji wywala mi błąd:

Dodam, że pracuję na kompilatorze Dev-C++ 4.9.9.2 pod Windowsem XP. Co to za błąd linkera... i dlaczego mi go wywala? Jak to "naprawić" by działało?


(Ryan) #2

main.cpp nie potrzebuje

#include 

using namespace std;

skoro zawiera je osoba.h, która w main dołączasz. osoba::zapamietaj powinna mieć sanity test:

if (strlen(napis) > 79) { /* blad - zrob cos */ }

A problem w tym jak masz stworzony projekt. Program powinien się kompilować (kompiluje się przykładowo pod VS). Odpowiedź to w takim razie: zobacz jak to DevCpp próbuje kompilować i linkować. Albo nie kompiluje osobnej biblioteki dla osoba.cpp albo kompiluje ale jej nie linkuje z tym co powstaje po skompilowaniu main.

Warto dodać, że Twój kod jest... dziwny. Używasz klas, strumieni i... skoków?