c ++中的多重定义错误

时间:2011-11-11 21:55:20

标签: c++ multiple-definition-error

我有2个文件,grabURL.cpp和grabURL.hpp。当我用gcc编译两者时,它给了我多个定义错误。

grabURL.cpp

#include "grabURL.hpp"
size_t buffer(void *ptr, size_t size, size_t nmemb, void *stream) { 
            int numbytes = size*nmemb; 
            char lastchar = *((char *) ptr + numbytes - 1); 
        *((char *) ptr + numbytes - 1) = '\0'; 
            ret.append((char *)ptr); 
            ret.append(1,lastchar); 
        *((char *) ptr + numbytes - 1) = lastchar;
    return size*nmemb; 
 }
void grabURL(std::string url, std::string *theRet){
    curl_easy_setopt(curl,CURLOPT_URL,url.c_str());
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION, buffer);
res = curl_easy_perform(curl);
*theRet = ret;
}

grabURL.hpp:

#ifndef CURLURLGRAB_HPP
#define CURLURLGRAB_HPP
#include <string>
#include <curl/curl.h>
CURL * curl;
CURLcode res;
std::string ret;
size_t buffer(void *ptr, size_t size, size_t nmemb, void *stream);
void grabURL(std::string url,std::string* theRet);

#endif

我不知道我做错了什么,我以为我正确地做了ifndef的事。究竟出了什么问题?

1 个答案:

答案 0 :(得分:2)

头文件中的此定义:

CURL * curl;
CURLcode res;
std::string ret;

从cpp文件中包含文件时定义,并且压缩一些其他翻译单元(也许是main.cpp?)

它们看起来不像头文件中的内容,但如果它们出现,那么您可以在头文件中声明它们extern并将实际定义移动到cpp文件。