CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - vector klasy jako parametr

vector klasy jako parametr

dział ogólny

vector klasy jako parametr

Nowy postprzez pioro700 » środa, 24 kwietnia 2013, 08:39

Witam.
Mam małą zagwozdkę z przekazaniem wektora własnej klasy jako parametru do funkcji

KOD cpp:     UKRYJ  
//plik definicje.h
class MojaKlasa
{
   // dane I funkcje
};

int wczytajPlik(vector<MojaKlasa>&, wstring);

//plik definicje.cpp
int wczytajPlik(vector<MojaKlasa> &sub, wstring plik)
{
   // to co funkcja ma robic
}


W programie, oczywiście w pliku nagłówkowym #include "definicje.h"
KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------
void __fastcall TForm1::srtButtonClick(TObject *Sender)
{
   if(OpenDialog1->Execute())
         {
                vector<MojaKlasa> *dane;


                if(wczytajPlik(dane, OpenDialog1->FileName.c_str()) == 0)
                        ShowMessage("Wszystko wczytane");
         }
}
//---------------------------------------------------------------------------
 

Wywala mi błąd

[ILINK32 Error] Error: Unresolved external 'wczytajPlik(std::vector<MojaKlasa, std::allocator<MojaKlasa> > *, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >)' referenced from Q:\C_BUILDER\TESTY_FUNKCJI\WIN32\DEBUG\MAINUNIT.OBJ
[ILINK32 Error] Error: Unable to perform link


NIe jestem ekspertem I próbowałem "googlować" problem bo w ten sposób najlepiej człowiek się uczy, ale niestety musiałem się poddać.
Ostatnio edytowano środa, 24 kwietnia 2013, 09:51 przez polymorphism, łącznie edytowano 1 raz
Powód: Używaj znaczników!
Avatar użytkownika
pioro700
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 29 lipca 2012, 11:36
Podziękował : 4
Otrzymał podziękowań: 0
System operacyjny: Win 10 PRO.
Kompilator: RAD Studio 10.2
SKYPE: pioro700
Gadu Gadu: 0
    Windows 7Internet Explorer

Re: vector klasy jako parametr

Nowy postprzez Corvis » środa, 24 kwietnia 2013, 09:00

1. Używaj znacznika dla kodu
2. Zrób sobie klasę MojaKlasa i zapisz ją w pliku o nazwie
3. Następnie dodaj dodaj klasę do Form1 #include "Definicje.h"
4. W Pliku *.h Form1 Dodaj

KOD cpp:     UKRYJ  
int wczytajPlik(vector<MojaKlasa>&, wstring);


4. W Pliku *.cpp Form1 zrób

KOD cpp:     UKRYJ  
int TForm1::wczytajPlik(vector<MojaKlasa> &sub, wstring plik)
{

}


Zobacz teorię w serwisie
Ostatnio edytowano środa, 24 kwietnia 2013, 22:29 przez Corvis, łącznie edytowano 2 razy
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: vector klasy jako parametr

Nowy postprzez pioro700 » środa, 24 kwietnia 2013, 09:25

Nie do końca rozumiem co masz na myśli pisząc "używaj znacznika dla kodu".

Moim założeniem było utworzenie klasy, którą mógłbym wykorzystywać w innych programach.
Ten program tylko testuje tą klasę, więc definicja funkcji w tym programie mija się z moimi założeniami.
Samą funkcję wczytajPlik przetestowałem lokalnie I jest OK.
Moja wiedza skończyła się na tym jak jej użyć z poziomu innego programu.

Pozatym "wczytajPlik" nie jest I nie powinno być składową TForm1, a dodawanie *.cpp, kiedy jest dodane *.h jest co najmniej nie zrozumiałe.
Avatar użytkownika
pioro700
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 29 lipca 2012, 11:36
Podziękował : 4
Otrzymał podziękowań: 0
System operacyjny: Win 10 PRO.
Kompilator: RAD Studio 10.2
SKYPE: pioro700
Gadu Gadu: 0
    Windows 7Internet Explorer

Re: vector klasy jako parametr

Nowy postprzez Corvis » środa, 24 kwietnia 2013, 09:58

A co ja będę walczył z twoimi założeniami. Moim zdaniem pisanie w taki sposób to proszenie się o kłopoty i prędzej czy później ci to wybuchnie :)

Masz w załączniku kod który działa a co ty dalej z tym zrobisz to już nie moja sprawa ;)

Jak wstawiasz kod programu to wstawiasz go w znaczniki [cpp]

Kod: Zaznacz cały
[cpp]tutaj kod [/cpp]
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: vector klasy jako parametr

Nowy postprzez polymorphism » środa, 24 kwietnia 2013, 10:06

Jeśli chodzi o znaczniki, to w oknie edycji posta masz różne przyciski, w tym przycisk CPP. Jak go naciśniesz, pojawią się znaczniki, między którymi powinien znaleźć się Twój kod. Chodzi o poprawę czytelności Twojego posta.

Wracając do błędu. Sprawa jest banalna, funkcja wczytajPlik oczekuje obiektu klasy vector, a Ty podajesz jej wskaźnik na obiekt:
KOD cpp:     UKRYJ  
vector<MojaKlasa> *dane;


    if(wczytajPlik(dane, ...) == 0)

Z drugiej strony treść błędu sugeruje, że także nie dodałeś do projektu pliku źródłowego definicje.cpp.

Corvis napisał(a):3. Następnie dodaj dodaj klasę do Form1 #include "MojaKlasa.cpp"

WTF?! Corvis nie pisz bzdur. Plik źródłowy powinien dodać do projektu funkcja Add to project (czy jakoś tak). Generalnie #include jest tylko do załączania nagłówków.
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
pioro700
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: vector klasy jako parametr

Nowy postprzez pioro700 » środa, 24 kwietnia 2013, 11:18

Sorry głupi błąd. Skopiowałem to przed poprawieniem
Jest oczywiście: vector<MojaKlasa> dane
if(wczytajPlik(dane, ....)

Kompilator wywala ten błąd właśnie przy takiej deklaracji.
Pozatym popraw mnie jeśli się mylę, ale czy przy deklaracji "#include "definicje.h" ,
"definicje.cpp" są znajdowane automatycznie ?? Do tej pory nigdy nie miałem z tym problem a I kompilator
znajduje tę definicję.

Corvis ... coś się tak nabuzował. Sam napisałeś jakieś dyrdymały I w żaden sposób nie dotyczą one zadanego
przeze mnie pytania. To że chcę utworzyć klasę do ponownego wykorzystania jest jednym z założeń C++, a nie prośbą o
kłopoty. W sumie też nie wiem o jakie kłopoty ci chodzi.
Avatar użytkownika
pioro700
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 29 lipca 2012, 11:36
Podziękował : 4
Otrzymał podziękowań: 0
System operacyjny: Win 10 PRO.
Kompilator: RAD Studio 10.2
SKYPE: pioro700
Gadu Gadu: 0
    Windows 7Internet Explorer

Re: vector klasy jako parametr

Nowy postprzez polymorphism » środa, 24 kwietnia 2013, 11:56

"definicje.cpp" są znajdowane automatycznie ??

Nie, przecież pisałem, że powinieneś plik dodać do projektu. A problemu z tym wcześniej nie miałeś prawdopodobnie dlatego, że pliki/klasy tworzyłeś w środowisku, które automatycznie dodawało źródła do projektu. Zasada jest prosta: pliki C, CPP, OBJ, LIB i inne źródłowe dodajesz do projektu odpowiednią opcją środowiska, pliki nagłówkowe załączasz dyrektywą #include. Ta zasada działa w każdym środowisku języka C/C++, dlatego trzeba ją znać, jeśli myśli się o poważniejszym programowaniu.

(...) ale czy przy deklaracji "#include "definicje.h"

Gwoli ścisłości, to nie jest deklaracja. Słowo wyrażenie bardziej tu pasuje.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: vector klasy jako parametr

Nowy postprzez pioro700 » środa, 24 kwietnia 2013, 12:51

Przepraszam za nazewnictwo które nie jest moją mocną stroną. Programowanie miałem na studiach w Danii 15 lat temu I używaliśmy tylko określeń angielskich, dlatego polskiego słownictwa dopiero się uczę. Pozatym programowanie nie było na najwyższym poziomie, więc można powiedzieć, że znów zaczynam od korzeni.
Dzięki za uwagi.
Avatar użytkownika
pioro700
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 29 lipca 2012, 11:36
Podziękował : 4
Otrzymał podziękowań: 0
System operacyjny: Win 10 PRO.
Kompilator: RAD Studio 10.2
SKYPE: pioro700
Gadu Gadu: 0
    Windows 7Internet Explorer

Re: vector klasy jako parametr

Nowy postprzez Corvis » środa, 24 kwietnia 2013, 22:28

polymorphism,

Alt + F11 - wybierasz ENTER i samo się wszystko robi.

Wynik tego masz w pliku który załączyłem.

Faktycznie kuźwa źle napisałem :zawiedziony: bo robiłem 10 rzeczy na raz. SORRY
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House

Za ten post autor Corvis otrzymał podziękowanie od:
pioro700
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: vector klasy jako parametr

Nowy postprzez polymorphism » czwartek, 25 kwietnia 2013, 10:37

Chyba nie rozumiem. Co Alt + F11 i enter? Chodzi o skrót klawiaturowy do opcji dodawania źródeł do projektu?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: vector klasy jako parametr

Nowy postprzez Corvis » czwartek, 25 kwietnia 2013, 10:48

Tak, jest Use Unit
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: vector klasy jako parametr

Nowy postprzez pioro700 » czwartek, 25 kwietnia 2013, 16:54

Dzięki za wszystkie podpowiedzi.
Corvis, twój prototype zadziałał, a co najśmieszniejsze jest taki sam jak mój. Jednak w moim programie jest gzieś jakiś haczyk przez który cały czas wywala mi błąd. Będę musiał troche posiedzieć I pzrepatrzyć kod linijka po linijce.

polymorphism, dzięki za poraday. Po dołączeniu plików cpp do projektu, wyłapałem dwa błędy.
Avatar użytkownika
pioro700
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): niedziela, 29 lipca 2012, 11:36
Podziękował : 4
Otrzymał podziękowań: 0
System operacyjny: Win 10 PRO.
Kompilator: RAD Studio 10.2
SKYPE: pioro700
Gadu Gadu: 0
    Windows 7Internet Explorer

Re: vector klasy jako parametr

Nowy postprzez Cyfrowy Baron » czwartek, 25 kwietnia 2013, 17:23

pioro700 napisał(a): Jednak w moim programie jest gzieś jakiś haczyk przez który cały czas wywala mi błąd.


Ten haczyk to pewnie to o czym pisał polymorphism, czyli nie włączyłeś do projektu pliku z klasą poprzez menu Project -> Add to project...
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 51 gości

cron