类指针错误:没有类型

class pointer error: does not have a type

本文关键字:类型 指针 错误      更新时间:2023-10-16

我的一个类变量是指向另一个类的指针,它给出了一个无类型的错误。想了几天就能想出来,有人看到错误了吗?由于某种原因,线路

 r->setright(NULL) 

使程序崩溃

#include "gridnode.h"
#include "grid.h"
#include "basenode.h"
class grid
{
    public:
        grid();
        void print();
    protected:
        gridnode *head;//error of no type here
};
#endif // GRID_H

和我的节点类

class gridnode:public basenode
{
public:
    char mark;
    gridnode *l, *r, *u, *d;
    gridnode(){
        l->setleft(
        r->setright(NULL);//crashes
        u->setup(NULL);
        d->setdown(NULL);
    }
    //set and get functions
protected:
};

任何帮助都会大大减少。

我的一个类变量是指向另一个类的指针,它给出了一个无类型的错误。

当你尝试使用gridnode时,它还没有被定义。例如,如果你的.h文件中有循环引用,就会发生这种情况。由于您只是声明一个指针,因此可以使用前向声明:

#ifndef GRID_H
#define GRID_H
// there should be no include of grid.h here
// move the gridnode.h and basenode.h includes to grid.cpp instead
class gridnode; // forward declaration
class grid
{
    public:
        grid();
        void print();
    protected:
        gridnode *head;
};
#endif // GRID_H

由于某种原因,线路

r->setright(NULL) 

使程序崩溃

gridnode构造函数中,您正在调用尚未初始化为指向任何对象的lrud指针上的方法。您通过调用未定义的行为上的方法来调用它们。您可能打算将指针本身设置为NULL,例如:

gridnode(){
    l = NULL;
    r = NULL;
    u = NULL;
    d = NULL;
}

或者:

gridnode() :
    l(NULL),
    r(NULL),
    u(NULL),
    d(NULL)
{
}