Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Funktiot ojennukseen

Tumpelo [10.12.2005 14:51:39]

#

Pystyyköhän niitä funktioita lätkimään muihin kuin, minun tapauksessani main.cpp tiedostoon? Käytän Dev-C++:aa, ja olisi kiva saada tuo yli 500 rivinen koodi järjestykseen. Funktioita on niin paljon että helpottaisi elämää. :D Tarkoitan siis että ne itse funktion sisällöt sais jonnekin muualle kuin itse ohjelman main tiedostoon.

Metabolix [10.12.2005 14:59:32]

#

Lisää projektiin uusi kooditiedosto, laita sinne haluamasi funktiot ja tallenna se oikean päätteisenä (esim. cpp). Sitten tee toinen tiedosto, johon laitat funktioiden esittelyt extern-lauseilla, ja tallenna se .h-päätteisenä. Liitä se includella main.cpp:hen.

// funktiotiedosto.cpp
// Ihan normaalisti funktioita
int OmaFunktio(int a, int b)
{
  return a * b + 10 / a;
}
// funktiot.h
// Ensin varmistetaan, että se tulee vain kerran mukaan:
#if !_Funktiot_h_Included
#define _Funktiot_h_Included 1
// Sama kuin edellisessä, mutta extern ja puolipiste.
extern int OmaFunktio(int a, int b);
#endif
// main.cpp
// Normaali include, mutta lainausmerkeillä
#include "funktiot.h"

Tumpelo [10.12.2005 15:28:21]

#

Muuten hyvä mutta muuttujat jotka olen määritellyt main.cpp:ssä ei toimi nyt funktioissa. Mitäs nyt?

Metabolix [10.12.2005 15:36:50]

#

Liität sen samaisen otsikkotiedoston funktiotiedostoonkin, ja laitat sinne samaan tapaan muuttujamäärittelyt externillä.

// main.cpp
int muuttuja;
// muuttujat.h
// Ensin varmistetaan, että se tulee vain kerran mukaan:
#if !_Muuttujat_h_Included
#define _Muuttujat_h_Included 1
// Sitten se muuttuja
extern int muuttuja;
#endif
// funktiotiedosto.cpp
#include "muuttujat.h"
int OmaFunktio(int a, int b)
{
  return a * b * muuttuja;
}

Muista kuitenkin, että liikoja globaaleja kannattaa välttää. Eli ylläolevassa tilanteessa ei missään tapauksessa käytetä globaalia. (Ei siinä käytetä edes funktiota; tuollainen menee makrolla helpommin.)

sqwiik [10.12.2005 15:38:28]

#

Ratkaisu riippuu pääasiassa siitä miten olet systeemin rakentanut ^_- Yksi ratkaisu on että nämä muuttujat viedään funktioille parametreina, tai sitten että niihin pääsee käsiksi funktioiden kautta.

// main.cpp
  #include "funktiot.h"
  int muuttuja;
  int anna_muuttuja(){return muuttuja;}
  ...
// main.h
  int anna_muuttuja();
  ...
// funktiot.cpp
  #include "main.h"
  ...
  void funktio_joka_tarvitsee_muuttujaa(){
    int k = anna_muuttuja();
  }
// funktiot.h
  void funktio_joka_tarvitsee_muuttujaa();

Meni kenties hieman jonnekin päin metsikköä, mutta toivottavasti ymmärrät idean tuosta -_-

Tumpelo [11.12.2005 15:51:42]

#

Juuh, enpä saanut toimimaan kunnolla. Taidan sittenkin lätkäistä ne funktiot main.cpp:hen niin ainakin toimii kunnolla, vaikka itse koodausvaihe onkin sitten hiukan hitaampi kun saa etsiä kaikkea. (olen kyllä huolella kommentoinut kaikki kokonaisuudet esille, mutta koodia on niin paljon että...)

Vastaus

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

Tietoa sivustosta