Prob mit operator =



  • Ich habe volgende operatoren in meiner class.

    class BSTR
    {
    
    public:
    	BSTR(void):itsBuilted(false),itsSize(ZERO),itsString(NULL){};
    	~BSTR(void);
    	const BSTR &operator=(const BSTR &rhs);
    	const BSTR &operator=(const char *rhs);
    	const bool operator==(const BSTR &rhs);
    	const bool operator!=(const BSTR &rhs);
    	BSTR &operator+(BSTR &rhs);
    	char &operator[](long int rhs);
    	const char &operator[](long int rhs) const;
    	bool operator<(const BSTR &Right);
    	bool operator>(const BSTR &Right);
    	bool operator<=(const BSTR &Right);
    	bool operator>=(const BSTR &Right);
    .
    .
    .
    private:
    	char *itsString;
    	long int itsSize;
    	bool itsBuilted;
    };
    

    Und jetzt brauche ich ein operator der folgentes macht char *operator=(const &Rhs); Ich habe diesen operator so programmiert das er eine kopie von sein string zuruckgibt, aber dann bekomme ich tausend warnings und errors.

    Deleting intermediate files and output files for project 'Main - Win32 Debug'.
    --------------------Configuration: Main - Win32 Debug--------------------
    Compiling...
    Main.cpp
    c:\windows\desktop\basis 1\myfunktion\str\beststr\beststr.hpp(183) : warning C4522: 'BSTR' : multiple assignment operators specified
    c:\windows\desktop\basis 1\myfunktion\str\beststr\beststr.hpp(191) : error C2662: 'GetSize' : cannot convert 'this' pointer from 'const class BSTR' to 'class BSTR &'
    Conversion loses qualifiers
    c:\windows\desktop\basis 1\myfunktion\clientdata\sympledata.hpp(304) : error C2593: 'operator =' is ambiguous
    c:\windows\desktop\basis 1\myfunktion\clientdata\sympledata.hpp(305) : error C2593: 'operator =' is ambiguous
    c:\windows\desktop\basis 1\myfunktion\clientdata\sympledata.hpp(306) : error C2593: 'operator =' is ambiguous
    c:\windows\desktop\basis 1\myfunktion\clientdata\sympledata.hpp(308) : error C2593: 'operator =' is ambiguous
    c:\windows\desktop\basis 1\myfunktion\clientdata\sympledata.hpp(575) : error C2593: 'operator =' is ambiguous
    c:\windows\desktop\basis 1\myfunktion\database\frsdatabase\cityzipcode.hpp(183) : error C2593: 'operator =' is ambiguous
    c:\windows\desktop\basis 1\myfunktion\database\frsdatabase\frsdatabase.hpp(137) : error C2059: syntax error : ','
    Error executing cl.exe.

    Main.exe - 8 error(s), 1 warning(s)

    was kann ich jetz machen 😞 😞 ich brauche diesen operator koste es was es wolle. Ach ja noch die funktion

    char *BSTR::operator=(const BSTR rhs)
    	STR Support;
    	char *pToChar;
    
    	Support.STRConstruct(&pToChar, rhs.GetSize());
    	Support.STRCopy(rhs.GetAddrString(), pToChar);
    	return pToChar;
    }
    

    Die funktionen machen genau das was ihre namen sagen, obwohl class STR voll scheise ist. Ja ich habe nie die zeit ne schone class zu machen ...



  • Master User schrieb:

    was kann ich jetz machen 😞 😞

    gleich fallen mir ein:
    a) den normalen op= löschen
    b) alle op= löschen une einen neuen bauen, der einen proxy um *this zurückgibt, der sich nach BSTR und nach char* wandeln kann
    c) nur den normalen op= stehen lassen und nen umwandlungsoperator nach char* anbieten
    wenn dir die nicht reichen, ich bin sicher, wenn wir ein wenig unkonventionell werden, gibts noch viele lustige lösungen.

    ich brauche diesen operator koste es was es wolle.

    unwahrscheinlich. das kannste ja nur brauchen, um sachen wie

    BSTR a,b;
    ...
    ifstream in(a=b);
    

    zu schreiben. dann ginge sicherlich auch

    BSTR a,b;
    ...
    ifstream in((a=b).c_str());
    


  • Ich brauche das um so was zu machen

    ifstream FileWithZIP(this->GetFileName1(), ios::in);

    Wobei

    BSTR FRST::GetFileName1(void){return this->itsFileName1;}

    und es gilt BSTR itsFileName1;

    Kann ich das umschreiben irgend wie?. (b) ist intresant wo finde ich was zum lessen?. Lössung (c) ist scheiße keine "\"elegante\"" lössung, habe ich mir auch überlegt.



  • Master User schrieb:

    Ich brauche das um so was zu machen

    ifstream FileWithZIP(this->GetFileName1(), ios::in);

    Und wo ist da eine Zuweisung? Vermutlich meinst du einen benutzerdefinierten Konvertierungsoperator.



  • ja(?!?) was wie aber kann ich das machen?. Ich habe das jetzt temporer so gemacht wie volkart es gesagt hat eine funktion die, die adresse des string zurugibt und noch eine funktion die eine kopie des strings zurugibt.



  • Master User schrieb:

    volkart

    volkard



  • sorry, volkard. 😞 😃 😞


Anmelden zum Antworten