[LÖST]Nybörjarhjälp -> .h-filer i C++ ?
[LÖST]Nybörjarhjälp -> .h-filer i C++ ?
Jag har suttit lite i sommar och pillat med C++. Jag har läst en del böcker, (någon 1000 sidors av Jessie Liberty, och nu en av Fredrik Vallbo som är mycket lättläst!)
Så i Fredrik Vallbos tredje c++ bok (objektorienterad c++) delar man upp källkoden i en .h-fil där man definierar en egen klass (person.h) med funktioner (metoder som han kallar det) i en annan fil (person.cpp) denna klass använder man sedan i en main.cpp, nu är saken den att den inte vill göra en körbar fil av det. Jag är rätt säker att jag har skrivit av koden från exemplet i boken rätt, men jag förmodar att man måste göra något mer än att bara ha filerna i samma mapp och be kompilatorn bygga main.cpp-filen?
Saken är den att själva kompileringen funkar hur bra som helst, jag får två binära filer, en main.o och en person.o -fil, utan felmeddelanden. Men när jag ber min editor, Geany, att göra en exekverbar fil så säger den att klassen jag använder inte är definierad eller något motsvarande. Verkar som at den inte förstår att den skall länka ihop person.o med main.o eller vad den nu gör. Ni får ursäkta, jag är nybörjare som sagt.
Så i Fredrik Vallbos tredje c++ bok (objektorienterad c++) delar man upp källkoden i en .h-fil där man definierar en egen klass (person.h) med funktioner (metoder som han kallar det) i en annan fil (person.cpp) denna klass använder man sedan i en main.cpp, nu är saken den att den inte vill göra en körbar fil av det. Jag är rätt säker att jag har skrivit av koden från exemplet i boken rätt, men jag förmodar att man måste göra något mer än att bara ha filerna i samma mapp och be kompilatorn bygga main.cpp-filen?
Saken är den att själva kompileringen funkar hur bra som helst, jag får två binära filer, en main.o och en person.o -fil, utan felmeddelanden. Men när jag ber min editor, Geany, att göra en exekverbar fil så säger den att klassen jag använder inte är definierad eller något motsvarande. Verkar som at den inte förstår att den skall länka ihop person.o med main.o eller vad den nu gör. Ni får ursäkta, jag är nybörjare som sagt.
Senast redigerad av 1 cthulhu, redigerad totalt 14 gånger.
-
- Inlägg: 44
- Blev medlem: 15 maj 2007, 14:29
- OS: Debian
- Utgåva: 14.04 Trusty Tahr LTS
- Ort: Ronneby
Re: Nybörjarhjälp -> .h-filer i C++ ?
Du måste inkludera .h-filen i .cpp-filen (#include "person.h", om nu filen heter person.h)cthulhu skrev:jag förmodar att man måste göra något mer än att bara ha filerna i samma mapp och be kompilatorn bygga main.cpp-filen?
Det förstod jag inte alls. Jag vet inte vad geany är men den ska inte ha något med kompileringen att göra (eller det är en IDE?).Saken är den att själva kompileringen funkar hur bra som helst, jag får två binära filer, en main.o och en person.o -fil, utan felmeddelanden. Men när jag ber min editor, Geany, att göra en exekverbar fil så säger den att klassen jag använder inte är definierad eller något motsvarande. Verkar som at den inte förstår att den skall länka ihop person.o med main.o eller vad den nu gör. Ni får ursäkta, jag är nybörjare som sagt.
Öppna en terminal och gå in i rätt katalog. Där skriver du
Kod: Markera allt
g++ main.cpp person.cpp -o person
- mcNisse
- Inlägg: 5211
- Blev medlem: 06 feb 2007, 20:51
- OS: Debian
- Utgåva: Vet inte/ingen utgåva passar
Re: Nybörjarhjälp -> .h-filer i C++ ?
Du behöver länka ihop main.o med person.o.
Enligt man sidan för ld borde det bara vara att skriva för ett c program.
Du kan dock behövå länka in fler libbar om du anänder andra libbar. Och jag tror att du behöver c++ motsvarighet till libc.
Jag rekomenterar att du tittar på hur man du bygger ihop makefiler för det här så slipper du komma ihåg alla kommandon och alla beroenden när du ändrar i en fil.
Enligt man sidan för ld borde det bara vara att skriva för ett c program.
Kod: Markera allt
ld -o person main.o person.o -lc
Jag rekomenterar att du tittar på hur man du bygger ihop makefiler för det här så slipper du komma ihåg alla kommandon och alla beroenden när du ändrar i en fil.
Re: Nybörjarhjälp -> .h-filer i C++ ?
Jo Geany är väl mer än en editor, den har en kompileringsknapp och make all-kommandon och annat mystiskt. Jag har ju inte använt terminalen under mina kompileringar än, men jag skall testa det där.
Om det är av intresse så ser filerna ut såhär:
main.cpp:
person.cpp
person.h
Om det är av intresse så ser filerna ut såhär:
main.cpp:
Kod: Markera allt
#include <iostream>
#include <cstdlib>
#include <string>
#include "person.h"
using namespace std;
int main(int argc, char *argv[])
{
Person* p=new Person;
string s;
cout << "Ange förnamn: ";
getline(cin,s);
p->setFornamn(s);
cout << "Ange efternamn: ";
getline(cin,s);
p->setEfternamn(s);
cout << "Ange M eller K fär"
<<"kvinna eller man:";
getline(cin,s);
p->setKon(s);
cout << p->getEfternamn()<<endl;
cout << p->getFornamn()<<endl;
cout << p->getKon()<<endl;
delete p;
return 0;
}
Kod: Markera allt
#include "person.h"
void Person::setFornamn(string s)
{
fornamn=s;
}
string Person::getFornamn()
{
return fornamn;
}
void Person::setEfternamn(string s)
{
efternamn=s;
}
string Person::getEfternamn()
{
return efternamn;
}
void Person::setKon(string s)
{
if (s=="k" || s=="K")
kon=true;
else
kon=false;
}
string Person::getKon()
{
if (kon) return "K";
else return "M";
}
Kod: Markera allt
#ifndef PERSONH
#define PERSONH
#include <string>
using namespace std;
class Person
{
private:
string fornamn;
string efternamn;
bool kon;
public:
void setFornamn(string s);
string getFornamn();
void setEfternamn(string s);
string getEfternamn();
void setKon(string s);
string getKon();
};
#endif
-
- Inlägg: 339
- Blev medlem: 25 mar 2008, 21:01
- OS: Ubuntu
- Utgåva: 16.04 Xenial Xerus LTS
- Ort: Linköping
Re: Nybörjarhjälp -> .h-filer i C++ ?
Du kan ändra hur geany "kompilerar" (egentligen säger den ju bara till gcc hur den ska kompilera) via Bygg -> Justera inkluderingar och argument
Rädda skog med ett musklick: http://www.ettklickforskogen.se/
Läsvärt: http://www.gnu.org/philosophy/right-to-read.html
Läsvärt: http://www.gnu.org/philosophy/right-to-read.html
-
- Inlägg: 309
- Blev medlem: 09 dec 2008, 21:34
- OS: Xubuntu
- Utgåva: 22.04 Jammy Jellyfish LTS
- Ort: Trelleborg
Re: Nybörjarhjälp -> .h-filer i C++ ?
Inhuman Soul skrev:Du kan ändra hur geany "kompilerar" (egentligen säger den ju bara till gcc hur den ska kompilera) via Bygg -> Justera inkluderingar och argument
Låter lite mellan raderna som att nästa sak att undersöka är hur man använder make och skriver en enkel Makefile,
men eftersom det finns rätt mycket så lämnar jag bara en notis om detta här.
/Johan
- micke_nordin
- Inlägg: 1539
- Blev medlem: 21 aug 2008, 17:03
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Nybörjarhjälp -> .h-filer i C++ ?
I geany kan du kompilera med f8 och sedan bygga med f9 (eller bygg→bygg i menyn) då länkas objektfilerna i hop och du får en exekverbar fil. Lär dig dock att skriva makefiler det har du stor nytta av.
/Micke
/Micke

- serialsniffer
- Inlägg: 235
- Blev medlem: 13 dec 2008, 14:04
- OS: Ubuntu
- Utgåva: 18.04 Bionic Beaver LTS
- Ort: Hackerland
- Kontakt:
Re: Nybörjarhjälp -> .h-filer i C++ ?
Lite offtopic:
Fredrik Vallbo är min 3d modellering, Spelutveckling, programmerings lärare på Göteborgs Tekniska Institut bara så att alla vet.
Han uppskattar mailkontakt med sina "kunder" så vill du få tag på han, gå in på
http://www.conva.se/index.php
Hej
Fredrik Vallbo är min 3d modellering, Spelutveckling, programmerings lärare på Göteborgs Tekniska Institut bara så att alla vet.
Han uppskattar mailkontakt med sina "kunder" så vill du få tag på han, gå in på
http://www.conva.se/index.php
Hej
------------------------
Serial Sniffer
Linux Ubuntu 9.10 Karmic Koala Gnome.
Jag är fadder. Läs om mighttp://ubuntu-se.org/phpBB3/viewtopic.p ... 60#p323784
Serial Sniffer
Linux Ubuntu 9.10 Karmic Koala Gnome.
Jag är fadder. Läs om mighttp://ubuntu-se.org/phpBB3/viewtopic.p ... 60#p323784
Re: Nybörjarhjälp -> .h-filer i C++ ?
Kul, jag har hittat en del fel i hans tre böcker, endast typografiska/språk fel dock, kanske någon kod också.
- serialsniffer
- Inlägg: 235
- Blev medlem: 13 dec 2008, 14:04
- OS: Ubuntu
- Utgåva: 18.04 Bionic Beaver LTS
- Ort: Hackerland
- Kontakt:
Re: Nybörjarhjälp -> .h-filer i C++ ?
Jo hittat lite stavfel osv oxå. Men som han skriver på conva.se så blir han glad om man kontaktar honom och berättar:)cthulhu skrev:Kul, jag har hittat en del fel i hans tre böcker, endast typografiska/språk fel dock, kanske någon kod också.
------------------------
Serial Sniffer
Linux Ubuntu 9.10 Karmic Koala Gnome.
Jag är fadder. Läs om mighttp://ubuntu-se.org/phpBB3/viewtopic.p ... 60#p323784
Serial Sniffer
Linux Ubuntu 9.10 Karmic Koala Gnome.
Jag är fadder. Läs om mighttp://ubuntu-se.org/phpBB3/viewtopic.p ... 60#p323784