2009-07-18 4 views
2

私は、ファイルの全内容を(Pythonのように)バッファに読み込むはずのread関数を持つC++ Fileクラスを持っています。しかし、unistd.hからread関数を呼び出そうとすると、次のようになります。標準的なPOSIXは、異なる署名を持つreadメソッドでシャドーされています。

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

+0

コードなしでは推測しかできません。 –

+0

実際にが含まれていますか? read(..何でも)の代わりに:: read(.. whatever)を呼び出すことを試みてください。 – nos

答えて

4

あなたは範囲について明示しようとしましたか。

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

+1

ありがとうございます。これはまさに私が必要としたものでした。あまりにも多くのPython、私はC + +に戻って、このすべてを再び取得する必要があります:-) – gruszczy

2

readメソッドのposix標準バージョンの定義は、extern "C"と定義されています。これは、読み取りシンボルがC++コンパイラによってマングルされず、ライブラリ内の適切な関数とリンクするために必要です。 CとC++の記号を混ぜ合わせて一致させると、予測できない結果になります。可能であれば、extern "C"と宣言されているシンボルと競合しないように、C++関数の名前を変更します。

関連する問題