Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Omat headerit

Chosen [18.12.2004 19:18:22]

#

Miten itse tehtyjä headereita käytetään?

Tutkimalla valmiita ohjelmia tein tällaisen ohjelman:

testi.cpp:

#include "header.h"

void main()
{
   funktio();
}

header.h:

void funktio();

header.cpp:

#include <iostream.h>
#include "header.h"

void funktio()
{
   cout<<"JEE!";
}

Tämä ei kuitenkaan toimi. Virheilmoituksina tulee sekä header.cpp:ssä että testi.cpp:ssä jotakuinkin samat "Unexpected type 'void'" ja "Missing ';' before '}'".

Luin tässä vähän aikaa sitten erään C++-kirjan jossa headereistä ei kerrottu, enkä muista muitakaan kirjoja. Tämä ohjelmani voi siis olla aivan täysin väärin.

Nuo virheet sekä koodit on kirjoitettu ulkomuistista, joten niissäkin saattaa olla virheitä.

Edit: Kuten sanoin, tämä on kirjoitettu ulkomuistista, mutta tällä kertaa tämä koodi on oikein toisin kuin alkuperäinen. Elikkäs header.h:stä puuttui se ';'. Ai että nyt tuntuu n00bilta.
(Minkä takia omia viestejään ei voi poistaa?)

Metabolix [18.12.2004 19:27:30]

#

Hassua, koska kyllä niitä juuri noin käytetään, tai ainakin minä käytän.

FrozenFire [19.12.2004 15:01:30]

#

Tota poisto hommaa saat kysyä anttilta...

Mihin kansioon headerit pitää/kannattaa laittaa?

Juice [19.12.2004 18:44:28]

#

Joko kansioon "include" tai sitten samaan kansiion .cpp-tiedoston kanssa(kai). Ota kuitenkin huomioon merkintöjen

#include <header.h>

ja

#include "header.h"

erot.

acorn [19.12.2004 18:50:47]

#

Sekä testi.cpp että header.cpp sisällyttävät koodiin mukaan tuon header.h:n.

Laitat header.h vaikkapa tähän muotoon:

#ifndef _HEADER_H_ //jos muuttujaa _HEADER_H_ ei ole ennestään määritelty
#define _HEADER_H_ //... niin määritellään se (esikääntäjälle)

void funktio();

#endif //_HEADER_H_

edit: Hieman kommentteja lisää
edit2: Hmm... Dev-C++ tai Mingw sekoilee. Ajattelin, että kääntäjä saattaisi valittaa, koska funktion prototyyppi määriteltäisiin kahdesti, mutta ei siltikään suostu kääntämään joka kerta. Toisella kääntäjällä koodi kääntyi sellaisenaan.

Metabolix [19.12.2004 18:52:30]

#

Viestien poistosta: Aiheen 1. viestiä ei voi poistaa.
Headereista: Yleensä projektin omat headerit kannattaa pitää projektin kansiossa. #include "tiedosto" liittää samassa kansiossa olevia tiedostoja, ja tuosta voi tietenkin laajentaa kansiopolulla (kun muistaa laittaa kaikki kenoviivat): #include "Grafiikka\\Direct3D\\MainRender.h"
<> -merkkien sisällä olevaa tiedostonimeä etsitään kääntäjän include-kansioista. Itselläni on oma include-kansio, jonka olen lisännyt kääntäjän listoihin ja jonne laitan sellaiset omat headerini, joita käytän useammassa projektissa, esimerkiksi 3D-koordinaastistossa liikkuva Piste-luokka (laitan vielä joskus koodivinkkeihin tämän oivan tekeleen).

thefox [20.12.2004 09:45:34]

#

acorn: _HEADER_H_ ei ole tuossa muuttuja :) Lisäksi sillä ei ole mitään väliä, että molemmat käännösyksiköt sisällyttävät tuon headerin. Include-vahtien tarkoituksena on estää saman headerin sisällyttäminen useasti samaan käännösyksikköön.

Metabolix: mieluummin käytetään kauttaviivoja (/) niin ei tarvitse kenoviivojen eskeippauksesta huolehtia. Toimii mainiosti Windowsillakin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta