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;
};#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
Sidstd::string ist für sowas auch manchmal eine gute Wahl.
Gruß,
Simon2.