类中使用this显示读取访问权限冲突

C++,编译器用的是visual studio2017,定义了一个类,在类中用this为另一个结构体的中的类指针赋值,之后一直提示
引发了异常: 读取访问权限冲突。
this 是 0xCEADC615。
源代码在这:

#include<Windows.h>
#include<cstdio>
#include<graphics.h>
#include<math.h>
struct chess;
class piece
{
public:
    int x;
    int y;
    chess*locat = NULL;
    int d;
    int ty;
    char name[6] = { 'R','K','B','Q','L','P' };
    void gets(int a, int b);
    void print();
    void move();
};
struct chess
{
    int x;
    int y;
    int d = 0;
    chess *next = NULL;
    piece *pen = NULL;
};
chess cb[8][8];
void piece::gets(int a, int b)
{
    if (locat != NULL)
    {
        locat->pen = NULL;
        locat->d = 0;
    }
    if (cb[a][b].pen != NULL)
    {
        cb[a][b].pen->locat = NULL;
    }
    x = a;
    y = b;
    locat = &cb[a][b];
    cb[a][b].d = d;
    cb[a][b].pen = this;
}
void piece::print()
{
    outtextxy(40 * x + 20, 40 * y + 20, name[ty-1]);//在此处报错
}
int main()
{
    initgraph(320, 320);
    int i, j, f, g;
    for (i = 0; i < 8; i++)
        for (j = 0; j < 8; j++)
        {
            cb[i][j].x = i;
            cb[i][j].y = j;
            if (j < 2)
                cb[i][j].d = 1;
            if (j > 5)
                cb[i][j].d = 2;
        }
    piece pan[32];//0-3rook 4-7Knight 8-11bishop 12-13Queen 14-15King 16-31Pawn
    pan[0].gets(0, 0), pan[1].gets(7, 0), pan[2].gets(0, 7), pan[3].gets(7, 7);//rook
    pan[4].gets(1, 0), pan[5].gets(6, 0), pan[6].gets(1, 7), pan[7].gets(6, 7);//knight
    pan[8].gets(2, 0), pan[9].gets(5, 0), pan[10].gets(2, 7), pan[11].gets(5, 7);//bishop
    pan[12].gets(3, 0), pan[13].gets(4, 7);//queen
    pan[14].gets(3, 7), pan[15].gets(4, 0);//king
    for (i = 0; i < 8; i++)
    {
        pan[i + 16].gets(i, 1);//wpawn
        pan[i + 24].gets(i, 6);//bpawn
    }
    for (i = 0; i < 32; i++)
    {
        pan[i].d = pan[i].locat->d;
    }
    while (1)
    {
        for (i = 0; i < 8; i++)
        {
            line((i + 1) * 40, 0, (i + 1) * 40, 320);
            line(0, (i + 1) * 40, 320, (i + 1) * 40);
        }
        for (i = 0; i < 32; i++)
            pan[i].print();
        MOUSEMSG msg;
        for (;;)
        {
            msg = GetMouseMsg();
            if (msg.mkLButton)
            {
                f = msg.x;
                g = msg.y;
                break;
            }
        }
        f = (f - f % 40) / 40;
        g = (g - g % 40) / 40;
        if (cb[f][g].pen != NULL)
            cb[f][g].pen->move();
    }
}

move()太长就不复制了

outtextxy 这个函数确实不存在啊
是 graphic.h 里定义的么?你是用的 easyx 么

【以下回答由 GPT 生成】

问题是在定义类piece中使用this关键字将另一个结构体chess中的类指针赋值时出现了"读取访问权限冲突"的异常。根据提供的代码,我无法确定异常具体出现在哪里,因为缺少了主函数和一些必要的代码。但是我可以给出一般的解决方案和一些可能导致异常的原因。

首先,读取访问权限冲突的异常通常是因为访问的内存地址没有正确的权限。这可能是因为以下几个原因导致的:

  1. 访问了空指针:可能在使用this关键字来访问chess结构体中的类指针时,出现了空指针。这可能是因为没有正确初始化或者设置pen指针。在使用this关键字前,请确保pen指针不为空。

  2. 访问已释放的内存:可能在使用this关键字之前,pen指针所指向的内存已被释放。请确保在使用this关键字之前,pen指针所指向的内存是有效的。

  3. 访问越界的内存:可能在使用this关键字时,访问了越界的内存。请检查数组的边界和索引范围,确保访问的内存是有效的。

另外,在你提供的代码中,我注意到你包含了一些头文件(<Windows.h>, <cstdio>, <graphics.h>, <math.h>),但是没有看到相关的使用。请确保这些头文件的使用是正确的,并且在编译时链接了必要的库文件。

最后,作为推荐,你可以尝试在代码中添加一些调试语句,比如打印一些变量的值,以便定位到具体的异常出现的地方。可以使用printf函数来输出一些调试信息。

如果你能提供更多的代码和错误信息,我可能能够给出更具体的帮助。请确保提供完整的代码和错误信息,并在问题中指出哪一行出现了异常。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^