Frage zur schreibweise im Bezug auf einen Konstruktor
-
Hallo, ist da ein unterscheid wenn ich schreib:
my_class(); oder my_class :: my_class(); ist das beides das selbe? (Beides funktioniert bei mir.)
#ifndef my_classH #define classH #include <iostream> class my_class { public: int foo () ; my_class (); my_class :: my_class (); }; extern my_class w; #endif
-
Ich habe noch eine Frage und zwar wie kann ein Array mithilfe des Konstruktor initialisieren?
Mein Compiler sagt immer: [BCC32 Fehler] call.cpp(6): E2034 Konvertierung von 'int' nach 'char[4]' nicht möglich
Aber ich übergeben im Konstruktor doch 'A' das ist doch für char eigentlich da ' ';
my_class.h
#ifndef wtfH #define wtfH #include <iostream> class my_class { public: int foo () ; char letter; char array[4] ; my_class::my_class (); }; extern my_class w; #endif
my_class.cpp
#include "Klassen\call.h" my_class w; my_class :: my_class () : array ('A') , letter('B') { } int my_class :: foo () { std::cout<<"ok"; return 0; }
Mein zweiter versuch:
my_class.cpp
#include "Klassen\call.h" my_class w; my_class :: my_class () : letter('B') { for(int i=0;i<sizeof(array);i++) { array[i] = '0'; } } int my_class :: foo () { std::cout<<"ok"; return 0; }
So funktioniert es aber ich habe gehört das besser ist wenn man so z.b. die Werte initialisert:
my_class :: my_class () : letter('B')
Aber das krieg ich mit dem Array nicht hin.
-
DerKonstruktor schrieb:
Hallo, ist da ein unterscheid wenn ich schreib:
my_class(); oder my_class :: my_class(); ist das beides das selbe? (Beides funktioniert bei mir.Ich bekomme einen Fehler: extra qualification on member. Es macht auch wenig Sinn, innerhalb der Klasse die Qualifizierung anzugeben. Was für einen Compiler hast du?
DerKonstruktor schrieb:
Ich habe noch eine Frage und zwar wie kann ein Array mithilfe des Konstruktor initialisieren?
In der Initialisierungsliste ist es nicht möglich, wie du schon bemerkt hast. Es geht nur im Konstruktorrumpf, wie in deinem 2ten Versuch. Im Übrigen ist
i<sizeof(array)
eine ganz, ganz schlechte Idee.
-
Dann musst du aber auch sagen warum:
mit
sizeof(array)
bekommst du den Speicherplatz, den alle Elemente des arrays belegen, in Bytes (bei 6 Elementen auf meinem System 6*4 = 24 Bytes).
Musst also noch durch die Größe eines einzelnen Elements teilensizeof(array)/sizeof(array[0])
denn 24 / 4 = 6.
-
Incocnito schrieb:
Dann musst du aber auch sagen warum:
mit
sizeof(array)
bekommst du den Speicherplatz, den alle Elemente des arrays belegen, in Bytes (bei 6 Elementen auf meinem System 6*4 = 24 Bytes).
Musst also noch durch die Größe eines einzelnen Elements teilensizeof(array)/sizeof(array[0])
denn 24 / 4 = 6.
Dann musst du auch sagen, um welchen Typen es sich handelt. 1
char
hat genau 1 Byte. Ein Array von 6 chars hat also genau 6 Bytes. Bei einemchar
Array hast du also keine Zugriffsverletzung in derfor
Schleife. Allerdings geht die Nullterminierung verloren.
-
Upps
Hab das ganze nur kurz überflogen und gar nicht gesehn das es um char geht.
Mist