Ошибки компиляции libcurl - PullRequest
2 голосов
/ 30 июля 2011

Я использую libcurl и получаю эти ошибки без написания какого-либо кода, просто компилируя, и я не знаю, почему

Fehler  49  error C2628: '$UnnamedClass$0x05e5b255$395$' gefolgt von 'bool' unzulässig (Semikolon ';' vergessen?)   c:\users\ttg\desktop\curl-7.21.7\lib\setup_once.h   273
Fehler  50  error C2065: '_SH_DENYNO': nichtdeklarierter Bezeichner C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\xiosbase  111

сначала это файл libcurl, и он говорит, что за ним следует bool (забыл точку с запятой?)

второй необъявленный идентификатор

это весь код

#pragma once
#include <curl/curl.h>
#include <curl/easy.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string>
#include <sstream>
#include <iostream>
using namespace std;

namespace fr {

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
{
   // assert(bodyfile == (FILE*) stream); //this assertion fails, but when i comment it, code works. Why?
    int written = fwrite(ptr, size, nmemb, (FILE *)stream);
    return written;
}
    /// <summary>
    /// Zusammenfassung für Form1
    ///
    /// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
    ///          die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
    ///          das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
    ///          Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
    ///          arbeiten, die diesem Formular zugewiesen sind.
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: Konstruktorcode hier hinzufügen.
            //
        }

    protected:
        /// <summary>
        /// Verwendete Ressourcen bereinigen.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }

    protected: 

    protected: 

    private:
        /// <summary>
        /// Erforderliche Designervariable.
        /// </summary>
        System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
        /// <summary>
        /// Erforderliche Methode für die Designerunterstützung.
        /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
        /// </summary>
        void InitializeComponent(void)
        {
            this->SuspendLayout();
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(284, 262);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->ResumeLayout(false);

        }
#pragma endregion

    private: System::Void backgroundWorker1_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e) {
    CURL *curl_handle;
    const char *headerfilename = "head.out";
    FILE *headerfile;
    const char *bodyfilename = "body.html";
    FILE *bodyfile;
    curl_global_init(CURL_GLOBAL_ALL);
    curl_handle = curl_easy_init();
    curl_easy_setopt(curl_handle, CURLOPT_URL, "http://url");
    curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L);
    curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);
    headerfile = fopen(headerfilename,"w");
    if (headerfile == NULL) {
        curl_easy_cleanup(curl_handle);
        return;
    }
    bodyfile = fopen(bodyfilename,"w");
    if (bodyfile == NULL) {
        curl_easy_cleanup(curl_handle);
        return;
    }
    curl_easy_setopt(curl_handle,   CURLOPT_WRITEHEADER, headerfile);
    curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, bodyfile);
    curl_easy_perform(curl_handle);
    fclose(headerfile);
    fclose(bodyfile);
    curl_easy_cleanup(curl_handle);
             }
    };
}

так объясняется вторая проблема:

1>C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\xiosbase(111) : error C2065: '_SH_DENYNO': nichtdeklarierter Bezeichner
1>        C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\xiosbase(196): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::_Iosb<_Dummy>".
1>        with
1>        [
1>            _Dummy=int
1>        ]

перевод

error C2065: '_SH_DENYNO': undeclared identifier
See reference to the instantiation of the classes-template being compiled

Ответы [ 4 ]

5 голосов
/ 31 июля 2012

Из-за того, что в libCURL есть файл с именем share.h.

Вы должны переименовать в curl_share.h и заменить все

 #include "share.h"

от

 #include "curl_share.h"
1 голос
/ 29 января 2013

Настройте свой путь включения только на c:\users\ttg\desktop\curl-7.21.7\include и не включайте также c:\users\ttg\desktop\curl-7.21.7\lib.

в каталоге lib есть share.h в корне конфликты с VC\include\share.h.

0 голосов
/ 23 февраля 2012

Вы можете исправить ошибку около bool, определив HAVE_BOOL_T в своем препроцессоре, и в вашем проекте были указаны два файла с именем share.h, один в libcurl и другой в стандартной библиотеке шаблонов, поэтому вы получаете такие ошибки про _SH_DENYNO.

0 голосов
/ 30 июля 2011

Делая дикие предположения, я бы сказал, что вы компилируете C, но включая заголовки C ++.<string> <sstream> and <iostream> являются заголовками C ++.

...