Permalänk
Medlem

C++ problem: ostream

Okej, nu har jag begränsat problemet. Vad tusan ska stå mellan { } ?
Jag anropar print med t som argument och talar i parentesen (cout) om vad print skall göra med det argument den får?

class Text //Klassdeklaration
{
private:
char vektor[];
int antal_tecken;
int id;

public:
bool isOk()const;
Text(); //Default-konstruerare
~Text(); //Default-destruerare
void print(ostream &out)const;
void copy(const char *mening);
};

Text::Text(){
cout <<"Nu är jag skapad! \n";
}

Text::~Text(){
cout <<"Hej då, nu försvann jag!";
}

void Text::print(ostream &out)const
{

//"Test" skall skrivas ut

}

void Text::copy(const char *mening){
strcpy(vektor,mening);
}

int main(){

Text t; //Ett tomt Text-objekt skapas
t.copy("Test"); //Lägg strängen "Test" i vektor
t.print(cout); //skickar t till print och talar om vad print skall göra, i detta fall cout

}

Visa signatur

Carpe Cerevisi!

Permalänk
Medlem

out << "Test";

Permalänk
Medlem

out << vektor;

Men du måste se till så att vektor är lång nog att ha plats för stängen i mening innan du gör strcpy.

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk
Medlem

#include <iostream> #include <string.h> using namespace std; class Text //Klassdeklaration { private: char * vektor; int antal_tecken; int id; public: Text(); //Default-konstruerare ~Text(); //Default-destruerare void print(ostream &out); void copy(const char *mening); }; Text::Text() { cout <<"Nu är jag skapad! \n"; } Text::~Text() { delete [] vektor; cout <<"Hej då, nu försvann jag!"; } void Text::print(ostream &out) { out << vektor; } void Text::copy(const char *mening) { vektor = new char[strlen(mening)+1]; strcpy(vektor,mening); } int main(){ Text t; //Ett tomt Text-objekt skapas t.copy("Test"); //Lägg strängen "Test" i vektor t.print(cout); //skickar t till print och talar om vad print skall göra, i detta fall cout }

SÅ här kan man alltid göra. Du kan inte ha print funktionen som const, eftersom du ändrar på ostream arrgumentet. Sedan om du inte vill använda dig av new/delete, så måste du deklarera char vektorn med ett fast antal element. Nu har du dock bara en vektor på 0 element, alltså kan du inte lagra något i den.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av 4r0
Du kan inte ha print funktionen som const, eftersom du ändrar på ostream arrgumentet.

Man kan visst ha funktionen som const (och bör ha det). Att en funktion i en klass är konstant betyder att den inte ändrar på något i klassen. Däremot kan du inte skicka ostream som en konstant referens
Ett tips är att använda std::string istället för en array av chars. Då behöver du inte krångla med konstruerare, desturerare eller tilldelningsoperator.

Permalänk
Medlem

Där ser man... Glömde visst bort att det gällde bara objekten i själva klassen som funktionen tillhörde. Jo, iofs när man tänker efter så är det mera vettigt så också ^^.

Permalänk
Medlem

Alright, tack för hjälpen. Får se när ska implementera new och delete men detta redde ut problemet för tillfället.

Visa signatur

Carpe Cerevisi!