[LÖST]Nybörjarhjälp -> .h-filer i C++ ?

Här diskuteras programmering och utveckling
Användarvisningsbild
cthulhu
Inlägg: 789
Blev medlem: 05 jan 2009, 14:11
OS: Debian

[LÖST]Nybörjarhjälp -> .h-filer i C++ ?

Inlägg av cthulhu »

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.
Senast redigerad av 1 cthulhu, redigerad totalt 14 gånger.
Zibri
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++ ?

Inlägg av Zibri »

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?
Du måste inkludera .h-filen i .cpp-filen (#include "person.h", om nu filen heter person.h)
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.
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?).

Öppna en terminal och gå in i rätt katalog. Där skriver du

Kod: Markera allt

g++ main.cpp person.cpp -o person
Då ska du ha en binär vid namn person. Annars klistra in utmatningen från g++ här.
Användarvisningsbild
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++ ?

Inlägg av mcNisse »

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.

Kod: Markera allt

ld -o person main.o person.o -lc
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.
Användarvisningsbild
cthulhu
Inlägg: 789
Blev medlem: 05 jan 2009, 14:11
OS: Debian

Re: Nybörjarhjälp -> .h-filer i C++ ?

Inlägg av cthulhu »

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:

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;
}
person.cpp

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";
}
person.h

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
Inhuman Soul
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++ ?

Inlägg av Inhuman Soul »

Du kan ändra hur geany "kompilerar" (egentligen säger den ju bara till gcc hur den ska kompilera) via Bygg -> Justera inkluderingar och argument
jsiei97
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++ ?

Inlägg av jsiei97 »

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
Användarvisningsbild
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++ ?

Inlägg av micke_nordin »

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
Användarvisningsbild
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++ ?

Inlägg av serialsniffer »

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
------------------------
Serial Sniffer

Linux Ubuntu 9.10 Karmic Koala Gnome.

Jag är fadder. Läs om mighttp://ubuntu-se.org/phpBB3/viewtopic.p ... 60#p323784
Användarvisningsbild
cthulhu
Inlägg: 789
Blev medlem: 05 jan 2009, 14:11
OS: Debian

Re: Nybörjarhjälp -> .h-filer i C++ ?

Inlägg av cthulhu »

Kul, jag har hittat en del fel i hans tre böcker, endast typografiska/språk fel dock, kanske någon kod också.
Användarvisningsbild
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++ ?

Inlägg av serialsniffer »

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å.
Jo hittat lite stavfel osv oxå. Men som han skriver på conva.se så blir han glad om man kontaktar honom och berättar:)
------------------------
Serial Sniffer

Linux Ubuntu 9.10 Karmic Koala Gnome.

Jag är fadder. Läs om mighttp://ubuntu-se.org/phpBB3/viewtopic.p ... 60#p323784
Skriv svar

Återgå till "Programmering och webbdesign"