Forum huvudsida -> Programmering -> C++: Vad är det jag gör fel??
Sidor: 1
olle | 16:09 - 21:a Juli 2006 | Post #1 | |
Medlem Inlägg: 57 Skicka PM |
Hej! Varje gång jag försöker kompilera så får jag ett fel som jag aldrig fått tidigare. Har kunnat köra denna kod tidigare utan något fel. Har en basklass med en subklass. När jag skapar en objekt av typen basklass eller subklass så får jag detta felmeddelande: "main.cpp:14: undefined reference to `Minnestarning::Minnestarning()' collect2: ld returned 1 exit status" Här e koden:
Tack i förhand ------------------------- Ingen signatur! |
Nissebosselasse | 17:01 - 21:a Juli 2006 | Post #2 | |
Medlem Inlägg: 490 Skicka PM |
Du behöver inte anropa basklassens konstruktor i den ärvda klassens konstruktor; den anropas automatiskt. Dessutom borde du inkludera basklassens headerfil (tarning.h) antingen i minnestarning.h (där skulle jag lagt den), eller i minnestarning.cpp, för som det är nu så vet inte den ärvda klassen vad en tarning är. ------------------------- http://pushingcows.se Gula Nallen |
olle | 17:08 - 21:a Juli 2006 | Post #3 | |
Medlem Inlägg: 57 Skicka PM |
stämmer att jag inte behöver anropa baskonstruktorn. Tog bort den och har includerat tarning.h i minnestarning.h. Men får fortfarande samma fel /main.cpp:14: undefined reference to `Minnestarning::Minnestarning()' collect2: ld returned 1 exit status Tycker det verkar skumt ------------------------- Ingen signatur! |
olle | 17:16 - 21:a Juli 2006 | Post #4 | |
Medlem Inlägg: 57 Skicka PM |
När jag lägger alla koder i samma fil så fungerar det och kompilera. Så felet ligger i includeringen i alla filer. Hehe får kolla upp det lite nogrannare.. tack för tipset ------------------------- Ingen signatur! |
Nissebosselasse | 11:29 - 22:a Juli 2006 | Post #5 | |
Medlem Inlägg: 490 Skicka PM |
Jag klippte och klistra in din kod precis som du skrev den (i de olika filerna som du angav i kommentarerna), kompilerade, och fick då (naturligtvis) en rad fel, men genom att åtgärda den första så löste sig resten. Det första felet var det som jag skrev om, nämligen att basklassen "tarning" inte är känd för den ärvda klassen "minnestarning". Den enda ändringen jag gjorde var följande (i minnestarning.h, se rad 5):
Undvik att lägga alla klassdefinitioner i samma fil; det försökte jag också göra en gång för länge sen, och det fungerade fram tills vissa klasser behövde veta om varandra i en viss ordning (då jag började flytta runt textblocken i headerfilen...ingen bra lösning). Bra regel: för varje klass finns två filer; en headerfil (.h) som säger hur klassen ser ut (eventuellt vilken den ärver från), och en .cpp som innehåller själva koden. Lite andra grejor: i minnestarning.cpp, i funktionen kasta (), som ser ut så här:
Du behöver inte ange att det är basklassens funktion (rad 6) som du anropar; eftersom du har ärvt den "ingår" den bland de andra metoderna för den aktuella klassen. Den enda gången du skulle behöva göra så här, är om du ärver från flera basklasser, där det finns metoder som delar samma namn. ------------------------- http://pushingcows.se Gula Nallen |
olle | 01:36 - 24:e Juli 2006 | Post #6 | |
Medlem Inlägg: 57 Skicka PM |
tackar, uppskattar all hjälp. Den fungerar nu osv ------------------------- Ingen signatur! |
Sidor: 1
Forum huvudsida -> Programmering -> C++: Vad är det jag gör fel??
Du får inte posta i den här tråden | Till toppen
Datum
2024-05-03 14:31
Vecka: 18
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.