/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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

Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408193
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste