2016-05-18 259 views
1

我想初始化这个:初始化大小

toto.cpp

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

但帧的大小取决于写在一个文件中的配置。

的main.cpp

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

FRAME_SIZEframeWidth*frameHeight,这些都是全局变量。

但是因为unsigned char au8FrameBuffer[FRAME_SIZE]正在等待一个常量FRAME_SIZE我不知道如何传递它。

+1

制作'au8FrameBuffer'一个字符指针,然后,读取配置文件,指向分配'的char [FRAME_SIZE]后' –

+1

由于您使用的是静态数组的大小在编译时是已知的。您可以在结构中使用字符指针,并在计算大小后在堆上动态创建数组。 –

回答

1

你可以在结构中使用字符指针,并在计算出它的大小后在堆上动态创建数组。

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

而不是char数组,可以使用std::vector<char>,您可以使用构造函数调用将其设置为合适的大小,也可以使用resize。当你需要一个指针时使用&buf[0]