Skocz do zawartości


magic385

Rejestracja: 03 maj 2010
OFFLINE Ostatnio: 03 05 2010 23:37
-----

Moje posty

W temacie: [C++] Dev-C++ - błędy linkera

03 05 2010 - 23:32

No teraz nie mam faktycznie tamtego błędu bo nie dochodzi do linkowania bo się jeszcze nawet nie kompiluje.Skoro już zainkludowałam je po dwa razy i nie było akurat z tym błędów to zostawię chyba bez #indef. Nie wiem w ogóle czy tego typu podział na moduły jest sensowny. Może można to jakoś lepiej rozplanować?

W temacie: [C++] Dev-C++ - błędy linkera

03 05 2010 - 23:15

No poprawiłam tamten głupi błąd z h. Miałam go na szczęście tylko w mainie. Ale błąd wciąż występuje. Program się kompiluje ale nadal wyrzuca błąd linkera. Moje pliki wyglądają tak:
main.cpp

#include <iostream>
#include <cstdlib>



using namespace std;

struct Sosoba
{int numer;
string imie;
string nazwisko;
bool plec;
int wiek;
Sosoba *nastepny;};

#include "modMenu.h"
#include "modFunkcje.h"

extern const string plik="bazadanych.txt";

void PokazMenu();

int main(int argc, char *argv[])
{Sosoba *glowka;
Przepisuj(plik,glowka);
PokazMenu();
system("PAUSE");
return EXIT_SUCCESS;
}]


modMenu.cpp

#include <cstdlib>
#include <iostream>
#include <string> //Dodanie podstawowych bibliotek.
#include <windows.h>
#include <conio.h>
#include <fstream>
#include <sstream>

#include "modFunkcje.h"
#include "modMenu.h"

using namespace std;

void PokazMenu();
void Kolorki();

void PokazMenu()
{system("cls"); //Funckcja wyświetlająca menu i umozliwiająca wybór opcji.
cout<<"MENU"<<endl;
cout<<"Aby wykonac wybrane operacje wybierz numer:"<<endl;
cout<<"1-Wyswietl pelna baze danych"<<endl;
cout<<"2-Dodaj nowy rekord do bazy"<<endl;
cout<<"3-Usun rekord o wybranym numerze Id"<<endl;
cout<<"4-Modyfikuj rekord o wybranym numerze Id"<<endl;
cout<<"5-Sprawdz ilosc rekordow w bazie"<<endl;
cout<<"6-WYJSCIE z programu"<<endl;

char numer;
numer = getch();

switch (numer)
{case '1':PokazWszystko();break;
case '2':Dodaj();break;
case '3':UsunElement();break;
case '4':Modyfikuj();break;
case '5':Rozmiar_bazy();break;
case '6':exit(0);break;
default: PokazMenu();break;}; };

int Kolorki(int i) //Funkcja zmieniajaca kolor wyswietlanego tekstu
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),i);};
]


modMenu.h

void PokazMenu();
int Kolorki(int i);
]


modFunkcje.cpp
#include <cstdlib>
#include <iostream>
#include <string>
#include <windows.h>
#include <conio.h>
#include <fstream>
#include <sstream>



using namespace std;

const string plik="bazadanych.txt";

struct Sosoba
{int numer;
string imie;
string nazwisko;
bool plec;
int wiek;
Sosoba *nastepny;};

#include "modFunkcje.h"
#include "modMenu.h"

int s2i(string n) {
stringstream sstr(n);
int m;
sstr >> m;
return m;};

void Przepisuj(string nazwa,Sosoba *&glowa)
{
string numer1,imie1,nazwisko1,plec1,wiek1;
ifstream plk_we;
plk_we.open(nazwa.c_str());

if ( !plk_we. is_open() ) {
cerr << "Blad otwarcia pliku \n";}
else {
cout<<"Udalo sie otworzyc"<<endl;};

Sosoba *aktualny;
glowa=NULL;
while(!plk_we.eof())
{
aktualny= new Sosoba;

plk_we>>imie1;aktualny->imie=imie1;
plk_we>>nazwisko1;aktualny->nazwisko=nazwisko1;
plk_we>>plec1; if (plec1[0]=='0'){ aktualny->plec=0;}else {aktualny->plec=1;};
plk_we>>wiek1;aktualny->wiek=s2i(wiek1);
aktualny->nastepny=glowa;
glowa=aktualny;
};

plk_we.close();};

void PokazWszystko( Sosoba *glowa)
{
cout <<"BAZA DANYCH"<<endl;
cout<<endl;
cout << "+----+--------------------------+----------+--------------+"<<endl;
cout << "| Nr | Nazwisko, Imie\t | Plec\t | Wiek\t |"<<endl;
cout << "+----+--------------------------+----------+--------------+"<<endl;
Sosoba *aktualny;
aktualny=new Sosoba;
aktualny=glowa;int numerek=1;
while (aktualny!=NULL)
{aktualny->numer=numerek;numerek++;
cout<<"|"<<aktualny->numer<<" "<<" |";
cout<<" "<<aktualny->imie<<" ";
cout<<aktualny->nazwisko<<"\t\t"<<"|";
cout<<"\t"<<aktualny->plec<<" |";
cout<<" "<<aktualny->wiek<<"\t\t"<<" |"<<endl;
cout << "+----+--------------------------+----------+--------------+"<<endl;
aktualny= aktualny->nastepny;};};


int Rozmiar_bazy(string nazwa)
{
int ile = 0;
ifstream plk_we;
plk_we.open(nazwa.c_str());
string linia;
while (!plk_we.eof())
{ getline(plk_we,linia);
ile++; };
plk_we.close();
return ile; };


void UsunElement(Sosoba *glowa)
{Sosoba *aktualny,*poprzedni;
aktualny=new Sosoba;
aktualny=glowa;
poprzedni=NULL;

int znak;

cout<<"Podaj numer rekordu:"<<endl;
cin>>znak;

while(aktualny!=NULL)
{if(aktualny->numer==znak)
{
if(aktualny==glowa)
{glowa=glowa->nastepny;}

else
poprzedni->nastepny=aktualny->nastepny;

Sosoba *temp;
temp = new Sosoba;
temp=aktualny;
aktualny=aktualny->nastepny;
delete temp; }
else{
poprzedni=aktualny;
aktualny=aktualny->nastepny;};

};
};

void Dodaj(string nazwa)
{Kolorki(11);
//cout<<"DODAWANIE NOWEGO REKORDU"<<endl://wsadz opis gdzie indziej, bo z tej fuunkcji korzystasz w modyfikuju
int n= Rozmiar_bazy(plik);
Kolorki(7);
cout<<"Podaj imie:"<<endl;
string imie;
cin>>imie;
cout<<"Podaj nazwisko:"<<endl;
string nazwisko;
cin>>nazwisko;
cout<<"Podaj płeć( 0-kobieta, 1-mezczyzna)"<<endl;
string plec;
cin>>plec;
cout<<"Podaj wiek:"<<endl;
int wiek;
cin>>wiek;

ofstream plk;
plk.open(nazwa.c_str(), ios::app);
plk<<endl;
plk<<imie<<" ";
plk<<nazwisko<<" ";
plk<<plec<<" ";
plk<<wiek<<" ";
plk.close();}

void Modyfikuj(string nazwa, Sosoba *glowa)
{UsunElement (glowa);
cout<<"podaj zmodyfikowane dane:"<<endl;
Dodaj(nazwa);
}:D


modFunkcje.h

void Przepisuj(string nazwa, Sosoba *&glowa);
void PokazWszystko( Sosoba *glowa);
int Rozmiar_bazy(string nazwa);
void UsunElement(Sosoba *glowa);
void Dodaj(string nazwa);
void Modyfikuj(string nazwa,Sosoba *&glowa):P


A postać pliku który wykorzystuje jest mniej więcej taka

Imie Nazwisko 0 19
Jan Kowalski 1 23

czyli najpierw imię potem nazwisko pleć (0-kobieta, 1-mężczyzna) i na końcu wiek.

W temacie: [C++] Dev-C++ - błędy linkera

03 05 2010 - 20:50

Tak mam projekt stworzony na bank.
#include <iostream>
#include <cstdlib>

#include "modMenu"
#include "modFunkcje"

using namespace std;

int main(int argc, char *argv[])
{PokazMenu();
system("PAUSE");
return EXIT_SUCCESS;
}
]
To jest w mainie.
a funkcja PokazMenu wyglada tak:

void PokazMenu()
{system("cls");
cout<<"MENU"<<endl;
cout<<"Aby wykonac wybrane operacje wybierz numer:"<<endl;
cout<<"1-Wyswietl pelna baze danych"<<endl;
cout<<"2-Dodaj nowy rekord do bazy"<<endl;
cout<<"3-Usun rekord o wybranym numerze Id"<<endl;
cout<<"4-Modyfikuj rekord o wybranym numerze Id"<<endl;
cout<<"5-Sprawdz ilosc rekordow w bazie"<<endl;
cout<<"6-WYJSCIE z programu"<<endl;

char numer;
numer = getch();

switch (numer)
{case '1':PokazWszystko();break;
case '2':Dodaj();break;
case '3':UsunElement();break;
case '4':Modyfikuj();break;
case '5':Rozmiar_bazy();break;
case '6':exit(0);break;
default: PokazMenu();break;}; };


i jest umieszczona w innym module. Natomiast pozostałe funkcje ktore wywoluje switch sa w kolejnym module.