2016-05-18 7 views
1

Ich möchte dies initialisieren:initialisieren Größe von char in struct auf Dateilesebedingungen abhängig

toto.cpp

typedef struct { 
    ... 
    unsigned char au8FrameBuffer[FRAME_SIZE]; 
    ... 
}tstrFrameRawData; 

Aber die Rahmengröße hängt von der Konfiguration in eine Datei geschrieben.

main.cpp

string cameraSource = configFile.getItem("CAMERA_SOURCE"); 
if (cameraSource == "CAMERA_WGA") 
      { 
       frameFormat = FDESC_u8FORMAT_GRAY_8BIT_752_480; 
       frameWidth = 752; 
       frameHeight = 480; 

FRAME_SIZE ist frameWidth*frameHeight, die globale Variablen sind.

Aber da unsigned char au8FrameBuffer[FRAME_SIZE] auf eine konstante FRAME_SIZE wartet, weiß ich nicht, wie man es übergibt.

+1

Make 'au8FrameBuffer' einen char-Zeiger und dann, nachdem die Konfigurationsdatei, zeigen Sie auf dem zugewiesenen' char Lesung [FRAME_SIZE] ' –

+1

Da Sie ein statisches Array verwenden seine Größe zum Zeitpunkt der Kompilierung bekannt sein muss. Sie können stattdessen einen Zeichenzeiger in der Struktur verwenden und das Array auf dem Heap dynamisch erstellen, nachdem Sie seine Größe berechnet haben. –

Antwort

1

Sie könnten einen Zeichenzeiger in der Struktur verwenden und das Array auf dem Heap dynamisch erstellen, nachdem Sie seine Größe berechnet haben.

typedef struct { 
    ... 
    unsigned char* au8FrameBuffer; 
    ... 
}tstrFrameRawData; 

.... 

FRAME_SIZE=frameWidth*frameHeight; 
tstrFrameRawData.au8FrameBuffer=new unsigned char[FRAME_SIZE];//dynamically created the array 

.... 
//delete[] tstrFrameRawData.au8FrameBuffer;//delete it once you are done 
1

Verwenden Sie anstelle eines Char-Arrays eine std::vector<char>, die Sie mit einem Konstruktoraufruf oder mit resize auf die richtige Größe einstellen können. Wenn Sie einen Zeiger benötigen, verwenden Sie &buf[0]

Verwandte Themen