|
| this fejl...I think Fra : Socketd |
Dato : 17-05-03 01:16 |
|
Hey
Klokken er 2:15 så denne fejl skyldes måske at jeg knap kan holde mine
øjne åbne, men se lige engang:
MakeUML.h:
class MakeUML {
list<string> inputfiles;
string outputfile;
string getClassName(ifstream);
list<string> getFunctions(ifstream);
list<string> getAttributes(ifstream);
public:
MakeUML();
void inputFiles(list<string>);
void outputFile(string);
void createUML();
};
MakeUML.c (uddrag):
void MakeUML::outputFile(string outputfile) {
this.outputfile = outputfile;
}
Den kommer med denne fejl:
request for member 'outputfile' in 'this', which is of non-addregate
type 'MakeUML *' (g++ under FreeBSD).
Jeg har lidt svært ved at se hvad fejlen er, især når jeg har benyttet
denne slags kode før.
Godnat og hyg
br
socketd
| |
Anders Melchiorsen (17-05-2003)
| Kommentar Fra : Anders Melchiorsen |
Dato : 17-05-03 01:18 |
|
Socketd <db@traceroute.dk> skrev:
> request for member 'outputfile' in 'this', which is of non-addregate
> type 'MakeUML *' (g++ under FreeBSD).
Erstat
this.outputfile
med
this->outputfile
er det generelle svar for ovenstående fejl, men i dette tilfælde
(this) kan du jo nok klare dig med
outputfile
Anders.
--
Min adresse er gyldig i en uge.
Derefter skal (kun) delen '.dJJJ-YY' fjernes.
| |
Mogens Hansen (17-05-2003)
| Kommentar Fra : Mogens Hansen |
Dato : 17-05-03 06:58 |
|
> "Socketd" <db@traceroute.dk> wrote
[8<8<8<]
> string getClassName(ifstream);
> list<string> getFunctions(ifstream);
> list<string> getAttributes(ifstream);
Kan dette overhovedet oversætte ?
Hvorfor overfører du argumentet af typen "ifstream" by value ?
Der bliver oprettet en kopi af objektet hver gang funktionen kaldes.
Det er formodentlig ikke hvad du havde tænkt, og det kan slet ikke lade sig
gøre (fordi copy-constructor i basisklasserne std::ios_base, std::basic_ios
er private).
Iøvrigt, hvorfor angiver du ikke arguments navn i erklæringen - det giver
væsentligt mere information til læseren hvis du gjorde
Det rigtige er formodentlig at overføre by reference:
list<string> getAttributes(ifstream& umlFileArg);
[8<8<8<]
> void inputFiles(list<string>);
> void outputFile(string);
Igen, hvorfor overfører du by value ?
Du betaler med et performance overhead, som du ikke får noget for.
Prøv i stedet:
void inputFiles(const list<string>& inputFilesArg);
void outputFile(const string& outputFileArg);
[8<8<8<]
> void MakeUML::outputFile(string outputfile) {
> this.outputfile = outputfile;
Hvis du bruge en navnekonvention, der sikrer at funktions-argumenter og
datamedlemmer ikke hedder det samme, ville du slet ikke have haft problemet.
Venlig hilsen
Mogens Hansen
| |
Socketd (17-05-2003)
| Kommentar Fra : Socketd |
Dato : 17-05-03 11:10 |
|
On Sat, 17 May 2003 07:58:04 +0200
"Mogens Hansen" <mogens_h@dk-online.dk> wrote:
> Iøvrigt, hvorfor angiver du ikke arguments navn i erklæringen - det
> giver væsentligt mere information til læseren hvis du gjorde
Tja, hvis læseren skal bruge de info til noget er det nok fordi han
ønsker at læse og forstå funktionen, gør han dette er han alligevel ikke
i MakeUML.h men i MakeUML.c.
> Igen, hvorfor overfører du by value ?
> Du betaler med et performance overhead, som du ikke får noget for.
> Prøv i stedet:
> void inputFiles(const list<string>& inputFilesArg);
> void outputFile(const string& outputFileArg);
Det plejer jeg egentlig også at gøre, så hvorfor jeg ikke gjorde det her
tror jeg hænger sammen med direkte dårlig programming. Så kan jeg måske
lære ikke at programmere når jeg er træt og ikke at tænke "nej, jeg
optimere koden bagefter".
> > void MakeUML::outputFile(string outputfile) {
> > this.outputfile = outputfile;
>
> Hvis du bruge en navnekonvention, der sikrer at funktions-argumenter
> og datamedlemmer ikke hedder det samme, ville du slet ikke have haft
> problemet.
Tja, det skulle jo gerne virke alligevel.
mvh
socketd
| |
Socketd (17-05-2003)
| Kommentar Fra : Socketd |
Dato : 17-05-03 11:11 |
|
On 17 May 2003 02:17:39 +0200
Anders Melchiorsen <postmaster@anders.d137-03.nospam.kalibalik.dk>
wrote:
> Erstat
> this.outputfile
>
> med
>
> this->outputfile
>
> er det generelle svar for ovenstående fejl, men i dette tilfælde
> (this) kan du jo nok klare dig med
>
> outputfile
Jep det var der fejlen lå, jeg tænkte nok at den java undervisning på
datamatiker vil forurene min C++ tankegang Takker!
mvh
socketd
| |
Socketd (17-05-2003)
| Kommentar Fra : Socketd |
Dato : 17-05-03 11:41 |
|
On Sat, 17 May 2003 12:27:42 +0200
"Mogens Hansen" <mogens_h@dk-online.dk> wrote:
> Læg dertil at det ikke er ualmindeligt at editorer bruger
> informationen headerfiler til at hjælpe programmøren (Code Completion,
> CodeInsight eller hvad det nu kaldes).
Point taken.
mvh
socketd
| |
|
|