1

エラーがあります:

エラー C2039: 'read': は '`global namespace'' のメンバーではありません。エラー C2661: 'Calc::SymString::read': 行から 3 つの引数を受け取るオーバーロードされた関数はありません: if (::read(fd_sock, &サイズ, 4) != 4)

このエラーと同様のエラーは、私のコードにかなり多く見られます。問題が何であるかを知っている人はいますか?Windows Visual Studio 2010 を使用しており、Unix からコードを移行しています。前もって感謝します!

4

2 に答える 2

3

read()はunistd.hで(LINUXで)定義されたUNIX関数です-私が読んだすべてのドキュメントは、それが標準のC関数ではないことを示しています。これが、UNIXではコンパイルされているがWindowsではコンパイルされていない理由である可能性があります。

UNIXread()ではファイル記述子を取りますが、Windowsでの同等の構造は「ハンドル」です。

プログラムに低レベルのファイル記述子I/Oが本当に必要ですか?fread標準のC関数であるを使用できますか?

このMicrosoftサポート記事では、Windowsで使用できるファイルハンドルの種類について説明しています。

There are multiple types of file handles that can be opened using 
the Win32 API and the C Run-time:

   Returned Type  File Creation API      API Set
   ---------------------------------------------
   HANDLE         CreateFile()           Win32
   HFILE          OpenFile()/_lcreat()   Win32
   int            _creat()/_open()       C Run-time
   FILE *         fopen()                C Run-time
于 2012-07-25T19:06:51.600 に答える
1

Microsoft は、Unix スタイルの I/O 関数を で宣言していio.hます。

そのヘッダーを含めてみてください。非推奨の名前の使用に関する警告が多数表示される場合があります (MS は name を使用することをお勧めします_read())。_POSIX_もしそうなら、それらの警告を止めるマクロを定義したいかもしれません。

于 2012-07-25T22:08:18.530 に答える