elementinitialisierer für arrays
-
hi leute ich hab ein problem mit einem einfachen code:
#include <iostream> const size_t BUFSIZE=64; class Buffer { private: char m_buf[BUFSIZE+1]; public: virtual ~Buffer() {}; Buffer() {}; const char* getBuf(void) const { return this->m_buf; }; }; int main() { Buffer b(); std::cout<<b.getBuf()<<std::endl; system("pause"); return 0; }zum einen würde mich interessieren wie ich das array initialisieren kann also z.b. mit : m_buf(0) oder :m_buf({0}) im ctor oder ob sowas überhaupt möglich ist. ausserdem erhalte ich bei diesem einfachen bsp den fehler:
Links von ".getKey" muss sich eine Klasse/Struktur/Union befinden.
was mache ich da falsch?
danke schonmal im voraus
-
Erstens: Direkt initialisieren kannst du ein Array leider nicht (leichte Inkompatibilität zwischen C und C++). Aber du kannst es im Ctor-Rumpf füllen (z.B. mit
Buffer() {strcpy(m_buf,"Hallo Welt");}).
(und in C++ arbeitet man sowieso lieber mit std::string anstelle von char-Arrays)Zweitens: Was eine Deklaration sein könnte, wird vom Compiler als Deklaration angesehen. Und der Ausdruck "Buffer b();" deklariert eine parameterlose Funktion, die einen Buffer zurückgeben soll (daß du mit der nichts anfangen kannst, ist dem Compiler egal). Lass mal die Klammern weg, dann stimmt der Code.
-
Hmm ich weiß nicht was du mit der Klasse machen willst ... wäre vllt. ganz gut wenn du uns das sagen würdest ^^
// Buffer.h #ifndef BUFFER_H__INCLUDED #define BUFFER_H__INCLUDED namespace my_util { class Buffer { public: Buffer(const std::size_t&); ~Buffer(); public: const char* get_data() const { return m_buffer; } std::size_t get_size() const { return m_size; } private: char* m_buffer; std::size_t m_size; }; }; #endif // BUFFER_H__INCLUDED// Buffer.cpp #include "Buffer.h" namespace my_util { Buffer::Buffer(const std::size_t& size) : m_size(size) { m_buffer = new char [size]; } Buffer::~Buffer() { if (m_buffer != NULL) delete [] m_buffer; } };... dann hast de ne dynamische Größe drin

#include <iostream> #include "Buffer.h" int main() { my_utils::Buffer buf(100); // buf nutzen ... am Ende von main wird der Speicher wieder freigegeben, da buf zerstört wird. }
-
ok vielen dank euch beiden! habe beide vorschläge mal probiert und es klappt hervorragend
