Konstruktor wird immer wieder aufgerufen
-
Hallo.
Habe eine Klasse über Sortieralgorithmen geschrieben, aber das Problem ist, dass der Konstruktor immer wieder aufgerufen wird. Wenn man da mal ne MessageBox zum Beispiel reinmacht, kommt wenn sie weggedrückt wird gleich eine neue.
Ich schicke einfach mal meine Klasse mit Konstruktor:
class sort { private: int *pixels; int *pixelstmp; int comp, swaps, speed; HWND hwnd; HRGN hRgn; //Sub Sort Functions int SmallestElement(int); void ResetCtr(); void QuickSort(int, int); void InsertSort(int, int, int); void ShakerSortLeft(int, int); void ShakerSortRight(int, int); void MergeSort(int, int); void Merge(int, int, int); void BuildHeap(); void HeapSort(int); //Main Sort Functions void SelectionSort(); void BubbleSort(); void InsertSort(); void QuickSort(); void ShakerSort(); void MergeSort(); void HeapSort(); public: sort(HWND); ~sort(); void SelectAlgorithm(int); void DrawPixels(); void CreateRandomPixels(); void SetSpeed(int); }; sort::sort(HWND h) { HRGN hRgnPixels, hRgnSwaps, hRgnComparisons, hRgnStatus; hwnd=h; hRgnPixels=CreateRectRgn(20, 20, 521, 521); hRgnComparisons=CreateRectRgn(100, 540, 170, 570); hRgnSwaps=CreateRectRgn(300, 540, 370, 570); hRgnStatus=CreateRectRgn(0,0,1,1); hRgn=CreateRectRgn(0,0,1,1); CombineRgn(hRgnStatus, hRgnComparisons, hRgnSwaps, RGN_OR); CombineRgn(hRgn, hRgnPixels, hRgnStatus, RGN_OR); DeleteObject(hRgnSwaps); DeleteObject(hRgnComparisons); DeleteObject(hRgnStatus); pixels = new int[MAX_PIXELS]; pixelstmp = new int[MAX_PIXELS]; CreateRandomPixels(); ResetCtr(); DrawPixels(); }Man merkt es, weil die Funktion DrawPixels immer wieder aufgerufen wird, obwohl das nur einmal geschehen soll.
Einige Funktionen sind aus der WinAPI, aber das Problem müsste eigentlich trotzdem ins C++-Forum gehören (meiner Meinung nach).
Hat da jemand eine Idee, was da falsch sein könnte?
Grüße Max
-
Ist so aus dem Code nicht ersichtlich. Evtl erzeugst du ein Objekt dieser Klasse in deiner Fensterfunktion (z.B. bei WM_PAINT) oder sonst wo, was dann bewirkt dass dauernd ein neues Objekt erzeugt wird (und damit auch dauernd der Konstruktor aufgerufen wird).
-
Na eben.
Ich Depp hab das Exemplar von meiner Klasse in der WindowsProcedure mit sort s; deklariert. Die muss doch static sein. Vielen Dank