C++ ja String

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?
5679
Äänestä

Muut lukivat myös

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.

Äänestä
  • 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ä.

    Äänestä

  • HerraNro47 kirjoitti:

    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.

    Äänestä

Lisää #include -rivien jälkeen:

using namespace std;

Tai sitten käytä muuttujissa
std::string

Äänestä
  • 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.

    Äänestä

Kommentoi aloitusta


Ongelma kirjoitti:

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?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu