AnA*_*ons 5 c++ windows gcc volatile c++11
你能帮我理解为什么编译器会给我这些错误信息吗?我相信易变物体的成员也是易变的.我在这里提到.但它表明,如果我们有一个结构:
struct someStruct
{
int d;
};
Run Code Online (Sandbox Code Playgroud)
'p'的定义如下:
volatile someStruct* volatile* p;
Run Code Online (Sandbox Code Playgroud)
&(*p)->d具有以下类型'int*volatile*'而不是'volatile int*volatile*'.下面是我正在处理的实际代码.
行(标记为错误1和2)是编译器抛出错误消息的位置:
#include <vector>
#include <windows.h>
using namespace std;
struct ThreadInfo
{
bool bWaiting = false;
bool bWorking = false;
};
struct lThreadInfo
{
ThreadInfo d;
lThreadInfo *pNextList = nullptr;
} volatile *volatile lThreads(nullptr);
thread_local ThreadInfo* currentThr(nullptr);
void CreateThread_(void (*pFunc)(ThreadInfo*))
{
volatile lThreadInfo* volatile* p = &lThreads;
for(; *p; p = &(*p)->pNextList); //**//error 1!**
*p = new lThreadInfo;
CreateThread(
nullptr, // default security attributes
0, // use default stack size
(long unsigned int (*)(void*))pFunc, // thread function name
&(*p)->d, // argument to thread function **//error 2!**
0, // use default creation flags
nullptr);
}
Run Code Online (Sandbox Code Playgroud)
错误消息如下:
error 1: invalid conversion from 'lThreadInfo* volatile*' to 'volatile lThreadInfo* volatile*' [-fpermissive]
error 2: invalid conversion from 'volatile void*' to 'LPVOID {aka void*}' [-fpermissive]
Run Code Online (Sandbox Code Playgroud)
注意:我知道volatile与线程安全无关,所以不要打扰告诉我. 注1:我在windows上使用mingw64编译器.
| 归档时间: |
|
| 查看次数: |
361 次 |
| 最近记录: |