Visual Studio не позволяет пропустить параметры по умолчанию? - PullRequest
0 голосов
/ 20 марта 2011

Я использую VS2010 в проекте C ++ с использованием opencv. Многие вызовы в opencv имеют параметры по умолчанию для нескольких последних параметров функций. Однако при пропуске этих параметров в вызовах функций Visual Studio жалуется и говорит: "functionname: too few arguments for call

Это причуда визуальной студии? Это где-то настройка, которую я могу отключить? Почему это происходит? Код прекрасно компилируется под g ++.

редактировать

В качестве примера

#include <cv.h>
#include <cxcore.h>

int main()
{

    CvMat *rotation_vector = cvCreateMat(3,3, CV_64FC1);
    double rotation[] = { 0, 1, 0,
                -1, 0, 0,
                0, 0, 1 };

    cvInitMatHeader(rotation_vector, 3, 3, CV_64FC1, rotation, 2147483647); // works
        cvInitMatHeader(rotation_vector, 3, 3, CV_64FC1, rotation); // doesn't work
    return 0;
}

1 Ответ

2 голосов
/ 21 марта 2011

Объявление для cvInitMatHeader() таково:

CVAPI(CvMat*) cvInitMatHeader( CvMat* mat, int rows, int cols, int type,
    void* data CV_DEFAULT(NULL), int step CV_DEFAULT(CV_AUTOSTEP) ); 

Определение CV_DEFAULT выглядит примерно так:

#ifdef __cplusplus
    #define CV_DEFAULT(val) = val
#else
    #define CV_DEFAULT(val)
#endif

Похоже, ваш компилятор Visual C ++ фактически компилируется в режиме C, а не в режиме C ++. В режиме C __cplusplus не будет определен, поэтому CV_DEFAULT расширяется до нуля. Следовательно, похоже, что объявление функции не имеет параметров по умолчанию.

Проверьте настройки проекта и убедитесь, что вы компилируете код в режиме C ++. То есть убедитесь, что включен переключатель компилятора /Tp или /TP. Вы также должны убедиться, что ваши файлы C ++ имеют расширение .cpp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...