将代码从c转换为c ++

时间:2015-04-22 19:01:16

标签: c++ c linux opencv raspberry-pi

我正在尝试将一些代码从C转换为C ++ 这是一个使用带有相机模块的覆盆子pi的项目,我想用它来分析图片。

但是在这段代码上(其他人创建)我得到了这个错误

231:8: error: expected primary-expression before ‘.’ token

这一行:

.max_stills_w = state->width,

我尝试了我能找到的所有东西,但它一直给我其他错误

    video_port = camera->output[MMAL_CAMERA_VIDEO_PORT];
    still_port = camera->output[MMAL_CAMERA_CAPTURE_PORT];

    //  set up the camera configuration
    {
       MMAL_PARAMETER_CAMERA_CONFIG_T cam_config =
       {
          { MMAL_PARAMETER_CAMERA_CONFIG, sizeof(cam_config) },
          .max_stills_w = state->width,
          .max_stills_h = state->height,
          .stills_yuv422 = 0,
          .one_shot_stills = 0,
          .max_preview_video_w = state->width,
          .max_preview_video_h = state->height,
          .num_preview_video_frames = 3,
          .stills_capture_circular_buffer_height = 0,
          .fast_preview_resume = 0,
          .use_stc_timestamp = MMAL_PARAM_TIMESTAMP_MODE_RESET_STC
       };
       mmal_port_parameter_set(camera->control, &cam_config.hdr);
    }
    // Set the encode format on the video  port

2 个答案:

答案 0 :(得分:2)

C ++不支持命名的初始值设定项,只支持位置初始值。

您必须阅读struct定义并将所有初始化程序排列为声明顺序。

任何未在C代码中被命名的成员都被隐式初始化为零。为了不跳过职位,你可能必须明确其中一些。

如果此代码来自JVCleave,则表示成员已经按照正确的顺序排列,您只需注释掉这些名称,它仍然有效。

答案 1 :(得分:1)

C99中的命名结构成员初始化未在C ++中实现。在C ++中,您可以使用构造函数执行成员初始化。 E.g:

struct sConfig 
{
    int m_x ;
    int m_y ;

    sConfig( int x, int y ) : m_x(x),
                              m_y(y)
    {}
} ;

或者:

struct sConfig 
{
    int m_x ;
    int m_y ;

    sConfig( int x, int y )
    {
        m_x = x ;
        m_y = y ;
    }
} ;

甚至是两种方法的组合。然后你实例化一个对象:

sConfig myConfig( 10, 20 ) ;

在此示例中,分别将m_xm_y初始化为10和20。

然后,您当然只能执行由结构定义的构造函数提供的初始化;但这并不一定是坏事 - 让用户随意决定哪些成员初始化不是特别安全或可维护。您当然可以定义多个构造函数来执行不同的初始化;您通常需要定义一个默认构造函数,例如:

struct sConfig 
{
    int m_x ;
    int m_y ;

    sConfig( int x, int y ) : m_x(x),
                              m_y(y)
    {}

    sConfig( ) : m_x(0),
                 m_y(0)
    {}
} ;

所以在这个例子中:

sConfig myConfig ;

相当于以下所有内容:

sConfig myConfig( 0, 0 ) ;
sConfig myConfig = { 0, 0 } ;
sConfig myConfig = {0} ;