0

我有一个 Visual C++ 程序,它在一个线程中使用FILE* fp = fopen(...). 我希望该线程在另一个线程读取文件时阻塞事件对象,然后在完成时向阻塞的线程发出信号,然后关闭文件。因为fp在线程之间共享,所以我将其声明为volatile FILE* fp. 但是,fread()不会接受 volatile 作为其FILE*论点。FILE* fpLocal = fp;我尝试在将调用的线程中使用本地指针,fread()但这让我得到了这个:

 Error: a value of type "volatile FILE*" cannot be assigned to an entity of type "FILE*"

自然地,这让我担心,也许我试图在一个线程中打开一个文件并在另一个线程中读取它开始时犯了一个错误,尽管我不明白为什么(还)。

有人可以帮我弄这个吗?为什么我不能将 a 分配volatile FILE*给 a FILE*

4

1 回答 1

3

为什么我不能将 a 分配volatile FILE*给 a FILE*

因为 C++ 具有严格的类型检查,并且您不能分配彼此不匹配的类型。
如果是这种情况,则需要使用强制转换运算符,但重要的是要注意,错误地使用它们也可能导致未定义的行为。
此行为与const限定符相同。

作为评论中已经提到的旁注,volatile这不是去这里的方式。

于 2012-05-22T15:38:38.783 回答