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 👍


Anmelden zum Antworten