Eikö stringejä voi heitellä ohjelman eri osista toiselle tai käyttää string-muuttujia?
Eli, jos minulla on tällaiset rivit xxx.h:ssa:
#ifndef _xxx_h
#define _xxx_h
#include // Tarvitaanko tätä edes täällä vai vain xxx.cpp:ssä?
class xxx{
public:
...
string giveTxt(); // 1
void takeTxt(string s); // 2
...
private:
...
string teksti; // 3
...
};
#endif
niin kääntäjä huutaa 1:stä
type name expected ja declaration missing
2:sta
) missing
3:sta
type name expected, multiple declaration of 'xxx::string' ja että toi 1. on earlier declaration of 'xxx:string'
Pitääkö mun muuttaa kaikki stringit joksikin muuksi vai onko tässä jokin muu juttu mahdollinen?
Eli, jos minulla on tällaiset rivit xxx.h:ssa:
#ifndef _xxx_h
#define _xxx_h
#include // Tarvitaanko tätä edes täällä vai vain xxx.cpp:ssä?
class xxx{
public:
...
string giveTxt(); // 1
void takeTxt(string s); // 2
...
private:
...
string teksti; // 3
...
};
#endif
niin kääntäjä huutaa 1:stä
type name expected ja declaration missing
2:sta
) missing
3:sta
type name expected, multiple declaration of 'xxx::string' ja että toi 1. on earlier declaration of 'xxx:string'
Pitääkö mun muuttaa kaikki stringit joksikin muuksi vai onko tässä jokin muu juttu mahdollinen?
Vastaukset 5
Vanhimmat
Pikavilkaisulla ja vertaamalla yhteen omaan vastaavanlaiseen tiedostooni tuo näyttäisi ihan oikealta. Lisäksi voit kokeilla toimiiko std::string giveTxt() (ja muut stringit vastaavasti), tai sitten xxx.h:iin "using namespace std;".
Yleinen tapa on juuri tuo #include laittaminen .h-tiedostoon, ja sitten #include siihen xxx.cpp:hen. Näin .cpp välttyy helpommin miljoonalta includelta.
Onko parempi kasata ne miljoona includea headeriin? Kun käsitellään tällaista esimerkkiä, sille on ihan sama missä se on, mutta kun ohjelma alkaa kasvamaan, säästyy aina vähemmällä kun sijoittaa includet juuri sinne missä niitä tarvitaan.
Monimutkaiset ja syvät include-riippuvuudet hidastavat kääntämistä ja vaikeuttavat sorsien siirtämistä.
Kai se on vähän makukysymys mihin niitä lätkii. Omat headerit kannattaa laittaa #ifndefin sisään, niin samaa headeria uudelleen includettaessa sitä ei tehdä enää toistamiseen.
Lisää #include -rivien jälkeen:
using namespace std;
Tai sitten käytä muuttujissa
std::string
Kantsii varmaankin stringin välittämisessä käyttää viittausta eli:
void xxx::takeTxt(string& s)
{
m_text = s;
}
jolloin alkuperäistä stringiä ei tarvitse kopioida pinoon kun funktiokutsu tehdään.