2012-09-01 49 views
0

當我嘗試編譯CPP未定義的參考`類::法」

$ GCC -lcurl try.cpp

/tmp/ccJs0k9m.o: In function `main': 
try.cpp:(.text+0x2d): undefined reference to `getURL::fetch(char*, char*)' 
collect2: ld returned 1 exit status 

的方法出現在標題和類體。究竟是什麼錯誤?

try.cpp

#include <curl/curl.h> 
#include <curl/easy.h> 
#include "getURL.h" 

int main(void) { 

getURL my_getURL; 

my_getURL.fetch("http://stackoverflow.com/", "file"); 
} 

getURL.h

#ifndef _getURL 
#define _getURL 

class getURL { 
public: 
    void fetch(char *url, char *filename); 
}; 
#endif 

getURL.cpp

#include <curl/curl.h> 
#include <curl/easy.h> 
#include <stdio.h> 


class getURL { 

private CURL *curl; 

public getURL() { 
    //code 
} 

public void fetch(char *url, char *filename) { 
    //code 
} 

private size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { 
    //code 
} 

public ~getURL() { 
    //code 
} 

} //end class 
+2

'$ GCC try.cpp getURL.cpp -lcurl' – jrok

+1

@jrok:圖書館要來在該行的末尾。 –

+0

@Kerrek忍者! :) – jrok

回答

0

你只編譯你的一個源文件。

變化:

gcc -lcurl try.cpp 

到:

gcc -lcurl try.cpp getURL.cpp 
+0

同樣的錯誤。 無論我只是寫在C.謝謝 – user1640807

3

您沒有使用正確的語法執行;這是

getURL::getURL() { 
    //code 
} 

void getURL::fetch(char *url, char *filename) { 
    //code 
} 

size_t getURL::write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { 
    //code 
} 

getURL::~getURL() { 
    //code 
} 

請注意,你不能在執行重複class部分(只包括頭代替)。還要注意,你不允許在實現中有私有成員在聲明中不可見......這是不幸的,但它是如何定義語言的。

+0

他們還需要在函數定義中丟失很多「'public'」和「'private'」。 – juanchopanza

+0

我將getURL ::添加到方法名稱的開頭,在它們之前刪除了public和private。我將私有方法添加到頭文件(爲什麼?)。並從getURL.cpp中移除class {}。我認爲這總結了你所說的話。 完全相同的錯誤。 – user1640807

+0

也要編譯一個C++程序,你需要調用'g ++',而不是'gcc'。 – 6502