Forum huvudsida -> Programmering -> C++, Något som spökar?
Sidor: 1
olle | 15:43 - 15:e Augusti 2006 | Post #1 | |
Medlem Inlägg: 57 Skicka PM |
Tänkte passa på och fråga om nåt annat när jag andå inte fått svar från min förra inlägg. Om det går bra Har en generisk find funktion som jag gjort. Där den retunerar Cref<Object>. Tanken är den att om sökningen misslyckas så ska den retunerar en NULL pekare. Annars resultatet. Skapade en Person objekt och matade in olika personnumer där jag sen försöker hitta en personnumer m.h.a find funktionen. Sen skriva ut personens inkomst. Problemet är att jag får kompileringsfel när jag försöker skriva ut resultatet med hjälp av en get funktion i Cref klassen. Koden
En sak att nämna är att get funktionen retunerar adressen till en Object och i funktionen är det en pekare som retuneras. Tänkte kanske man måste ha speciell syntax när man försöker skriva ut (cout). Testade och söka efter ett personnumer som ej fanns då skrev den ut "Personen du söker finns ej". Sökte jag efter personnunmer som fanns så skrev den inte ut något. ( fick då ta bort cout << v.get(); ). Med andra ord så fungerar v.get() utan cout. Detta får jag vid kompileringen: 2c.cpp: In function "int main()": 2c.cpp:61: error: no match for "operator<<" in "std::cout << c. Cref<Object>::get [with Object = Person]()" /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/ostream.tcc:67: anm: kandidater är: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>:perator<<(std::basic_ostream<_CharT, _Traits>& (*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>] /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/ostream.tcc:78: anm: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>:perator<<(std::basic_ios<_CharT, _Traits>& (*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>] /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/ostream.tcc:90: anm: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>:perator<<(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>] /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/ostream.tcc:125: anm: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>:perator<<(long int) [with _CharT = char, _Traits = std::char_traits<char>] /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/ostream.tcc:159: anm: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>:perator<<(long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>] /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/ostream.tcc:102: anm: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>:perator<<(bool) [with _CharT = char, _Traits = std::char_traits<char>] /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/ostream:176: anm: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>:perator<<(short int) [with _CharT = char, _Traits = std::char_traits<char>] ...... och mycket mer ------------------------- Ingen signatur! |
Nissebosselasse | 16:00 - 15:e Augusti 2006 | Post #2 | |
Medlem Inlägg: 490 Skicka PM |
Ett allmänt tips: jag kan förstå att du skriver sådana här metoder/funktioner i inlärningssyfte, men annars: använd STL-biblioteket (det finns redan massvis av generella sökfunktioner - std::find t.ex.). Det spar dig huvudvärken, och de är garanterade att fungera. Nu ska jag fortsätta jobba! ------------------------- http://pushingcows.se Gula Nallen |
olle | 17:41 - 15:e Augusti 2006 | Post #3 | |
Medlem Inlägg: 57 Skicka PM |
Anledningen till att jag har egen find funktion är att jag håller på gå igenom en gammal tenta. Där uppgifter går ut på att man ska använda denna. Har en kurs efter mig som jag tänkte fixa. Hoppas jag inte varit till besvär eller nåt.. Ville främst se hur Cref fungerar. Hade den som bilaga där man skulle använda den för och lösa uppgiften. Skrev ner koden för och försökte se hur man gör i main(). dvs hur man använder det rent sagt. ------------------------- Ingen signatur! Senast redigerad 17:43 - 15:e Augusti 2006 |
Nissebosselasse | 17:47 - 15:e Augusti 2006 | Post #4 | |
Medlem Inlägg: 490 Skicka PM |
Har en kurs efter mig som jag tänkte fixa. Hoppas jag inte varit till besvär eller nåt.. Som jag skrev, att skriva egna funktioner i syfte att lära sig är helt förståeligt. Jag ber om ursäkt om jag fick det att låta som en grinig gammal gubbe som pekar med käppen och svär... Ska kolla genom koden när jag kommer hem. Dom har inte Visual Studio här på labbet...va konstigt... ------------------------- http://pushingcows.se Gula Nallen |
olle | 17:54 - 15:e Augusti 2006 | Post #5 | |
Medlem Inlägg: 57 Skicka PM |
Det är lungt. behöver inte be om ursäkt eller så..Förstår tanken med att man använder STL så mycket man kan så man slipper detta. Lite skumt om nu tex min find funktion är fel. Då kan man säga att läraren behöver läsa en kurs själv Tack iallfall att du orkar kolla koden sen ha de gött i jobbet ------------------------- Ingen signatur! |
olle | 22:37 - 15:e Augusti 2006 | Post #6 | |
Medlem Inlägg: 57 Skicka PM |
En annan gav mig tipsen och överlagra operator<< i min Person-struct. Frågan är om det löser allt eller om de finns nåt mer. Ska se om jag kan skriva den funktionen. ,,r lite osäker dock... Kanske börjar bli sent, får nog ta det imorgon. ------------------------- Ingen signatur! |
Nissebosselasse | 22:40 - 15:e Augusti 2006 | Post #7 | |
Medlem Inlägg: 490 Skicka PM |
Okej, kollat igenom det nu. För egna objekt (klasser, strukturer), måste du överlagra << och tala om för std::cout hur den ska skriva ut objektet. För om du tänker efter; hur vet std::cout vad en Person är? Vad i Person-strukturen är det den ska skriva ut? Det är detta du själv måste lägga in. Det enda jag ändrade i koden var i strukturen Person:
På det här sättet kan du dirigera en Person-struktur till vilken ström (av typen std::ostream, som cout är) som helst, eftersom strömmen nu har något att anropa. Jag för övrigt rekommendera Bruce Eckels bok (fånigt efternamn han har förresten...) "Thinking in C++ 2nd ed Volume 2", som jag länkat till i en annan tråd, där bland annat ett kapitel ägnas åt just detta. EDIT: här är länken till böckerna (eh, forumlänk, men jaja) http://www.blinkenlights.se/?p=readtopic&topicid=676 ------------------------- http://pushingcows.se Gula Nallen Senast redigerad 22:53 - 15:e Augusti 2006 |
olle | 23:50 - 15:e Augusti 2006 | Post #8 | |
Medlem Inlägg: 57 Skicka PM |
Tack för hjälpen. Nu fungerar koden som den ska. Ska kolla i boken, verkar som det är en bra bok. Jag som tänkte sova för ett tag sen Godnatt nu iallfall ------------------------- Ingen signatur! |
Sidor: 1
Forum huvudsida -> Programmering -> C++, Något som spökar?
Du får inte posta i den här tråden | Till toppen
Datum
2024-04-27 02:04
Vecka: 17
Besökare
Inloggade: 0
Gäster: 605
Medlemmar
Medlemmar: 53576
Forum
Senaste inlägget: HAHA MÄNNISKAN LEVER ÄN (13:45 - 18:e Januari 2019, av Hetzz)
Wiki
Senaste ändringen:
3D (rev: 1, tid: 09:40 - 13:e November 2015)
Chatt
#blinkenlights @ Libera.Chat
Gratis shellkonton för IRC, webbsidor mm.