verstehe "invalid conversion"-error nicht



  • Hallo an alle,
    bin ein blutiger Anfänger in C++. Bin eigentlich Java-Programmierer.
    Habe da folgendes Problem. Ich habe mir eine Buffer-Klasse geschrieben:

    Buffer.h:

    class Buffer
    {
    private:
    int BUFFER_SIZE;

    public:
    Buffer(int size);
    char *buffer;
    void free();
    friend class File;
    };

    Buffer.cc

    #include "Buffer.h"

    Buffer::Buffer(int size){
    if(size < 1){
    throw new Exception(Exception::WrongBufferException);//Exception ist
    auch eine eigene Klasse die hier keine Rolle spielt
    }
    BUFFER_SIZE = size;
    buffer = malloc (BUFFER_SIZE);
    }

    Buffer::~Buffer(){
    free(buffer);
    }

    void Buffer::free(){
    free(buffer);
    BUFFER_SIZE = 0;
    }

    später dann folgender Aufruf:

    #define BUFFER_SIZE 1024
    ...
    Buffer buffer = new Buffer(BUFFER_SIZE);

    dabei erhalte ich folgenden Fehler:
    rcopy.cc:27: error: invalid conversion from `Buffer*' to `int'
    rcopy.cc:27: error: initializing argument 1 of `Buffer::Buffer(int)'

    ich kann den Fehler nicht nachvollziehen. Er sagt doch aus, dass das
    erste Argument vom Konstruktor ihn verursacht. BUFFER_SIZE ist doch aber
    vom Typ int. Was mache ich falsch?

    greetz
    Sid



  • Ich empfehle dir, statt malloc/free new und delete zu benutzen.

    Im Gegensatz zu Java musst du in C++ Objekte nicht mit new anlegen, aber wenn du es tust, bekommst du einen Zeiger. Den Rückgabewert von new könntest du hier also nur einem Buffer* zuweisen.

    Deine #define-Direktive benennt auch deine Membervariable in 1024 um, wenn sie vor der #include-Direktive steht. In C++ solltest du #define außer für Includewächter gar nicht benutzen.

    Übrigens solltest du auch die Exception nicht mit new erzeugen.

    Und falls das nicht nur eine Übung sein soll: Die Klasse std::vector wäre wohl die bessere Wahl.



  • ich danke dir in jeglicher Hinsischt - auch für den Tipp mit std::vector

    greetz
    Sid



  • SidKennedy schrieb:

    ich danke dir in jeglicher Hinsischt - auch für den Tipp mit std::vector

    greetz
    Sid

    std::string ist für sowas auch manchmal eine gute Wahl.

    Gruß,

    Simon2.


Anmelden zum Antworten