wchar_t proplemme



  • Hallo ich habe eine classe (naja die meisten kenne die schon ;)"

    class Cartoon
    {
    .
    .
    .
    .
    	//kataskeuazh mia adeia simboloseira kai thn epistrebh
    	// *********************************************************
    	void Build(wchar_t *In, unsigned short int Size);
    
    Cartoon::Build(wchar_t *In, unsigned short int Size)
    {
    	//dhlosh MEtablhton
    
    			//Kurio Programma
    
    	//sigouros programatismos prota sbhnoume
    	delete[] In;
    	//NULL;
    
    	//meta grafoume kataskeuazoume
    	In = new wchar_t[Size];
    
    	if(In == NULL)
    	{
    		cout << "!!!Fatal Error!!! __FILE__ 000 005. La8os isosdos dedomenon to programma termatizh." << endl;
    		abort();
    	}
    }
    

    Out ich bekome überal wo ich wchar_t benutze fehler.

    error C2264: 'Build' : error in function definition or declaration; function not called
    error C2556: 'int __thiscall Cartoon::SetMessege2(unsigned short *)' : overloaded function differs only by return type from 'void __thiscall Cartoon::SetMessege
    2(unsigned short *)'

    Ich weis wiso nicht wiso der fheler kommt ist wchar_t nicht reserviert oder was weis ich. Und was kann ich dagen tun. oder solte ich char benutzen und wchar_t vergesen???



  • Bei der Definition fehlt der Rückgabetyp (void).



  • und auch wenn es sich kompilieren laesst ....

    isses A. Schlechter Stil ...
    b. macht mit sicherheut ned dass was es soll :p

    wchar_t * myString = new wchar_t [10];  // zum test mal so anlegen 
    cout << static_cast<void *>(myString); // Adresse von myString mal anzeigen lassen
    Cartoon::Build(myString,100); // deine funktion aufrufen 
    
    cout << static_cast<void *>(myString); // was glaubst was er hier wohl anzeigt ? richtig , dieselbiege wie oben ....
    

    Warum ? Parameter werden per Wert uebergeben, das heisst sie werden kopiert, und das Orginal nicht angefasst. Dein In in deiner funktion ist nur ne kopie von MyString.

    Besser: pointer of pointer ( C ) oder nochbesser, Referenzen ( C++ ) uebergeben .

    Cartoon::Build(wchar_t* &In, unsigned short int Size)

    Nun isses nur noch schlechter Stil ! 😃

    Grundregeln:
    - Allokieren und deallokieren eines Speicherbereiches sollten ned quer ueber das projekt / ueber mehrere Funktionen verteilt werden ...
    - wenn schon in C++ bist, nutze die Destruktoren (automatischer aufruf) um speicher wieder freizugeben. Dafuer kannst vorgefertigte klassen nehmen ... oder selber welche schreiben ....
    std::basic_string<wchar_t> ist dein freund ...
    oder sowas wie std::auto_ptr<wchar_t> myptr(new wchar_t[10]) macht dir das Leben leichter, wenn partuu keine Stringklasse willst ....

    Ciao ...



  • oder sowas wie std::auto_ptr<wchar_t> myptr(new wchar_t[10]) macht dir das Leben leichter,

    so aber nicht!



  • RHBaum schrieb:

    Cartoon::Build(wchar_t* &In, unsigned short int Size)

    ich mag mich irren, aber meiner Meinung nach ist das absolut total unzulässig. Zumindest spinnt MSVC 6.0 bei solch einer Konstruktion (Referenz auf Pointer) total rum.
    Also sinnigerweise tatsächlich eher den std::basic_string<wchar_t> verwenden, ist auch einfacher zu handhaben



  • @case
    ups sorry, ja ist unsauber, sollt auto_ptr nicht nehmen ....

    lieber selber was schreiben ....

    @Deadlef
    hab ich keine probleme mit ...
    wchar_t* &In nimmt er bei mir anstandslos (MSVC++ 6.0) ... Abgesehen davon dass es esthetisch gesehen schon zu juckreizen fuehren sollt 😃

    Ciao ...



  • Deadlef schrieb:

    ich mag mich irren, aber meiner Meinung nach ist das absolut total unzulässig. Zumindest spinnt MSVC 6.0 bei solch einer Konstruktion (Referenz auf Pointer) total rum.

    Das ist aber nicht unzulässig, und ehrlich gesagt kann ich mir nicht vorstellen, dass MSVC6 deswegen rumspinnt, weil sowas schließlich auch in der Standardlibrary vorkommt.



  • OK, sorry. Habs nochmal ausprobiert, und tatsächlich:

    void funkt1(int* &zahl) //funktioniert
    void funkt2(int& *zahl) //Fehlermeldung:
    

    Die Fehlermeldung lautet dann
    error C2528: '<Unknown>' : pointer to reference is illegal

    Ihr habt recht, ich unrecht. Hätte ich das mal früher gewusst, ich hätte mir einige Dereferenzierungen sparen können 😞


Anmelden zum Antworten