2009-07-18 57 views
2

我有讀取功能的C++類的文件,即假定一個文件(就像Python做)的整個內容讀入緩衝區。然而,當我試圖從unistd.h中調用read函數,我得到:標準POSIX讀取由讀取方法陰影與不同的簽名

file.cpp:21: error: no matching function for call to ‘File::read(int&, char*&, int)’

file.cpp:17: note: candidates are: char* File::read()

我在做什麼錯?這些簽名完全不同,爲什麼我不能簡單地稱它?

+0

你打算向我們展示代碼,還是隻讓我們猜測整天? – rlbond 2009-07-18 19:09:27

+0

沒有代碼,你只能猜測。 – 2009-07-18 19:22:36

回答

4

你是否試圖明確範圍;

char* File::read() 
{ 
    // Double-colon to get to global scope 
    ::read(...); 
    // .. 
} 

2

用於讀方法的POSIX標準版本的定義被定義爲extern "C"。這是非常必要的,這樣讀取符號不會被C++編譯器改變,並且鏈接到庫中的正確函數。混合和匹配C和C++符號將產生不可預知的結果。如果可能,請重命名C++函數,以免與聲明爲extern "C"的任何符號發生衝突。