我的类变量之一(它是指向另一个类的指针)给出了没有类型的错误。经过几天的思考就能弄清楚,有人看到错误了吗?也出于某种原因

 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时, undefined 。例如,如果您在.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



gridnode构造函数内部,您正在调用lrud指针的方法,这些方法尚未初始化为指向任何东西。您正在通过调用 undefined 的行为来调用它们上的方法。您可能打算将指针本身设置为NULL,例如:
gridnode(){
    l = NULL;
    r = NULL;
    u = NULL;
    d = NULL;
}

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

关于c++ - 类指针错误:没有类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34191715/

10-11 22:06
查看更多