pettssonMedlem sedan jan. 2002777 inlägg
Jag skapar en klass och har då två privata strömmar, input och output, samt en open-funktion. I open() vill jag initiera input och output:
class MinKlass {
public:
MinKlass();
private:
void open();
std::ifstream input;
std::ofstream output;
};
MinKlass::MinKlass() {
open();
}
// Fler funktioner
void MinKlass::open() {
MinKlass::output = std::ifstream("filnamn");
MinKlass::input = std::ofstream("filnamn");
}
Detta get dock något kryptiskt felmeddelande om privata metoder och operator= i std::basic_ios. Om jag däremot i klassen deklarerar filen direkt:
class MinKlass {
public:
MinKlass();
private:
void open();
std::ifstream input("filnamn");
std::ofstream output("filnamn");
};
Fungerar det. Dock så måste jag få lite data från programmet först, så det fungerar inte i praktiken. Varför fungerar det på det här sättet? Om jag i open() skriver
void MinKlass::open() {
MinKlass::output("filnamn");
MinKlass::input("filnamn");
}
Så får jag "term does not evaluate to a function taking 1 arguments". Vad gör jag fel?
Kör Visual C++ 2005 Express Edition om det hjälper.
PhorpherMedlem sedan feb. 20002 059 inlägg
pettsson skrev:
Jag skapar en klass och har då två privata strömmar, input och output, samt en open-funktion. I open() vill jag initiera input och output:
class MinKlass {
public:
MinKlass();
private:
void open();
std::ifstream input;
std::ofstream output;
};
MinKlass::MinKlass() {
open();
}
// Fler funktioner
void MinKlass::open() {
MinKlass::output = std::ifstream("filnamn");
MinKlass::input = std::ofstream("filnamn");
}
Detta get dock något kryptiskt felmeddelande om privata metoder och operator= i std::basic_ios. Om jag däremot i klassen deklarerar filen direkt:
class MinKlass {
public:
MinKlass();
private:
void open();
std::ifstream input("filnamn");
std::ofstream output("filnamn");
};
Fungerar det. Dock så måste jag få lite data från programmet först, så det fungerar inte i praktiken. Varför fungerar det på det här sättet? Om jag i open() skriver
void MinKlass::open() {
MinKlass::output("filnamn");
MinKlass::input("filnamn");
}
Så får jag "term does not evaluate to a function taking 1 arguments". Vad gör jag fel?
Kör Visual C++ 2005 Express Edition om det hjälper.
Nu var det ett bra tag sedan jag kodade C++ men nog är det väl så att med MinKlass::output("yaddayadda") så försöker du referera till en statisk klassvariabel.
Använd this istället.
pettssonMedlem sedan jan. 2002777 inlägg
Hm, det är möjligt... Jag har sysslat med java tidigare, så jag vet inte riktigt. Men det blir samma fel i alla fall, "Term does not evaluate to a function taking 1 argument"
PhorpherMedlem sedan feb. 20002 059 inlägg
pettsson skrev:
Hm, det är möjligt... Jag har sysslat med java tidigare, så jag vet inte riktigt. Men det blir samma fel i alla fall, "Term does not evaluate to a function taking 1 argument"
void MinKlass::open()
{
this.output.open("filnamn");
this.input.open("filnamn");
}
pettssonMedlem sedan jan. 2002777 inlägg
Hum, det borde man kanske tänkt på... :r
Tack!
Sang-draxMedlem sedan juli 2002570 inlägg
Du bör kanske göra så här istället:
MinKlass::MinKlass():
input("filnamn"),
output("filnamn")
{
}
och strunta i open()-funktionen eftersom den ändå anropas i konstruktorn.
pettssonMedlem sedan jan. 2002777 inlägg
Ovanstående kod är förenklad, jag måste anropa några andra funktioner innan jag öppnar för skriv/läs. Annars hade det ju varit bättre.