Ошибка C4839: нестандартное использование класса 'ATL::CW2AEX<520>' в качестве аргумента для функции с переменными числами

Я использую Curl в проекте, и моя функция возвращает ошибку о CW2AEX.

    const TCHAR* path; 
    const TCHAR* fileName;

    TCHAR url[ MAX_PATH ] = { 0 };
    _stprintf( url, _T( "%s%s" ), path, fileName );

    char errorCode[ CURL_ERROR_SIZE ] = { 0 };
    function( curl, CURLOPT_ERRORBUFFER,        errorCode );    
    function( curl, CURLOPT_HEADER,             0 );
    function( curl, CURLOPT_FOLLOWLOCATION,     1 );
    function( curl, CURLOPT_NOPROGRESS,         0 );
    function( curl, CURLOPT_WRITEDATA,          isMemoryDownload ? ( void* )( &memoryFile ) : ( void* )( &diskFile ) );
    function( curl, CURLOPT_WRITEFUNCTION,      isMemoryDownload ? CNetwork::WriteToMemory : CNetwork::WriteToDisk );
    function( curl, CURLOPT_PROGRESSDATA,       0 );
    function( curl, CURLOPT_PROGRESSFUNCTION,   CNetwork::Pursuit );
    function( curl, CURLOPT_URL,                CW2AEX< sizeof( url ) >( url ) );

Я предполагаю, что он должен загрузить значение явно, чтобы скомпилировать его. Не тихо уверен?

1 ответ

Сообщение об ошибке дает подсказку: для аргумента переменной функции необходимо разрешить неоднозначность типа и привести вспомогательный класс к приемлемому типу:

function(curl, CURLOPT_URL, (LPCSTR) CW2AEX< sizeof( url ) >( url ) );

Вы также можете сделать это проще с минимальными затратами (используя CStringA):

function(curl, CURLOPT_URL, (LPCSTR) CStringA(url));
Другие вопросы по тегам