C++代码中的易失相关错误

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编译器.