Frage zu Arrays mit dynamischer Größe (C / C++)
-
Hallo,
ich habe eine Frage, und zwar habe ich ein Programm, welches zwei Bilder lädt.
int array_breite = Bild1.width - Bild2.width; int array_hoehe = Bild1.height - Bild2.height; int testarray[array_breite][array_hoehe]
Bild2 ist immer kleiner als Bild1, somit sind beide Ausdrücke >0
... so würde ich es gerne machen, mein Compiler schluckts aber nicht...
Fehler 1 error C2057: Konstanter Ausdruck erwartet c:\Users\Documents\Visual Studio 2008\Projects\OpenCV_Cuda_TEMP\OpenCV_Cuda_TEMP\main.cpp 37
Fehler 3 error C2057: Konstanter Ausdruck erwartet c:\Users\Documents\Visual Studio 2008\Projects\OpenCV_Cuda_TEMP\OpenCV_Cuda_TEMP\main.cpp 37
Fehler 5 error C2087: 'testarray': Feldindex fehlt c:\Users\Documents\Visual Studio 2008\Projects\OpenCV_Cuda_TEMP\OpenCV_Cuda_TEMP\main.cpp 37
Fehler 6 error C2133: 'testarray': Unbekannte Größe c:\Users\Documents\Visual Studio 2008\Projects\OpenCV_Cuda_TEMP\OpenCV_Cuda_TEMP\main.cpp 37
Fehler 2 error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich. c:\Users\Documents\Visual Studio 2008\Projects\OpenCV_Cuda_TEMP\OpenCV_Cuda_TEMP\main.cpp 37
Fehler 4 error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich. c:\Users\Documents\Visual Studio 2008\Projects\OpenCV_Cuda_TEMP\OpenCV_Cuda_TEMP\main.cpp 37Wieso nicht und wie kann ichs lkösen?
DANKE
Ich nutze den Compiler ovn Visual Studio 2008.
-
Nimm std::vector<..>.
Simon
-
Die Größen von Arrays müssen zur Compilezeit feststehen. Nimm dynamische Container wie std::vector. Das ist ohnehin keine so gute Idee megabyteweise Bilddaten auf den Stack zu legen, von daher hat dynamische Speicherverwaltung gleich zwei Vorteile bei deinem Problem.
-
Höhe und Breite müssen bereits zur Compile-time bekannt sein und dürfen somit keine Variablen sein. Statt des dynamische Arrays würde ich dir aber die Verwendung von std::vector empfehlen, da er sich selbständig um die Aufräumarbeiten kümmert:
#include <vector> int array_breite = Bild1.width - Bild2.width; int array_hoehe = Bild1.height - Bild2.height; std::vector<int> BildDaten( array_breite * array_hoehe );
Du musst dich jetzt nur noch um die Umrechnung von linearen Indizes auf 2D Indizes und umgekehrt kümmern.
-
okok, vielen Dank an euch alle, tolles Forum hier - hilfsbereit und nett..
Eine Frage habe ich allerdings noch: Ist das ein C oder ein C++ Thema?? Ich hab grad in meinem C++ Buch nachgeschaut (c++ von a bis z), hab aber nix zu dem Thema gefunden bzw. nur eien Verweis auf Arrays?
Wenn jmd nen guten Link griffbereit hat, immer her damit.
Danke!
-
SchwanAL schrieb:
okok, vielen Dank an euch alle, tolles Forum hier - hilfsbereit und nett..
Eine Frage habe ich allerdings noch: Ist das ein C oder ein C++ Thema?? Ich hab grad in meinem C++ Buch nachgeschaut (c++ von a bis z), hab aber nix zu dem Thema gefunden bzw. nur eien Verweis auf Arrays?
Wenn jmd nen guten Link griffbereit hat, immer her damit.
Danke!Das ist ein C++-Thema, aber "C++ von A bis Z" gilt nicht als ein C++-Buch, sondern als Bockmist der sofort entsorgt gehört.
-
Lol ok... dann meine (hoffentlich) allerletzte Frage.. was für Literatur (deutsprachige bevorzugt) empfliehlst Du? Will nicht mit jedem Pfurzproblem das Forum beschäfigen
-
SchwanAL schrieb:
Eine Frage habe ich allerdings noch: Ist das ein C oder ein C++ Thema??
In C++ müssen Arrays compilezeitkonstante Größe haben. Deswegen fliegt die C2133, wenn Du sowas in C++ machst.
C hingegen kann VLAs. http://en.wikipedia.org/wiki/Variable-length_array
Soviel zu Sinnhaftigkeit mit einem C/C++-Buch einen Sprachenmischmasch zu lernen. hihihi.
-
SchwanAL schrieb:
Lol ok... dann meine (hoffentlich) allerletzte Frage.. was für Literatur (deutsprachige bevorzugt) empfliehlst Du? Will nicht mit jedem Pfurzproblem das Forum beschäfigen
Zu empfehlende Literatur: http://www.c-plusplus.net/forum/251551