嗨,我正在尝试解决此错误,当我尝试将链接列表传递给我拥有的另一个类时遇到此错误。我浏览了其他问题,但似乎没有一个可以解决此问题。

我还需要SLLNode留在ListAsSLL中,因为它是其他类的父级

DynamicSizeMatrix应该与ListAsSLL聚合

我的DynamicSizeMatrix.cpp文件

#include "DynamicSizeMatrix.h"
#include<iostream>
#include<string>
#include<cassert>
#include<cstdlib>
#include"ListAsSLL.h"

using namespace std;

DynamicSizeMatrix::DynamicSizeMatrix(SLLNode* sll,int r, int *c)
{

    rws = r;
    col = new int [rws];
        for(int x=0; x < rws; x++) // sets the different row sizes
        {
            col[x] = c[x];
        }

    SLLNode *node = sll ;
//  node = sll.head;

    *info = new SLLNode*[rws];
    for (int x= 0; x< rws;x++)
    {
        info[x] = new SLLNode*[col[x]];

    }

    for(int x=0;x<rws;x++)
    {
        for(int y=0;y<col[x];y++)
        {
            info[x][y] = node;
            node = node->next; // My error happens here

        }
    }


}


我的“ DynamicSizeMatrix.h”

#include"ListAsSLL.h"
#include "ListAsDLL.h"
#include"Matrix.h"
#include"Object.h"
class SLLNode;

class DynamicSizeMatrix : public Matrix
{

private:
    SLLNode*** info;
    //Object* colmns;
    int rws;
    int *col; //array of column sizes
    //  int size;

public:
    DynamicSizeMatrix()
    {
        info = 0;
        rws = 0;
        col = 0;
    }
    DynamicSizeMatrix(SLLNode* sll,int r, int *c);
//......


和“ ListAsSLL.h”

class ListAsSLL : public List
{
    //friend class LLIterator;
    friend class DynamicSizeMatrix;
    protected:

        struct SLLNode
        {
                Object* info;
                SLLNode* next;
            //  SLLNode(Object *e, ListAsSLL::SLLNode* ptr = 0);
        };

        SLLNode* head;
        SLLNode* tail;
        SLLNode* cpos; //current postion;
        int count;

    public:

            ListAsSLL();

        ~ListAsSLL();
        //////////////


提前致谢

最佳答案

在您的类ListAsSLL中,从使用它的外部类的角度来看,它只能访问公共成员。如您所见,您的SLLNode在protected部分中。

因此,您确实有两个选择(嗯,实际上有很多选择),但是这里有两个选择使它至少封装在同一文件中:


将SLLNode声明移到public部分中,然后按如下方式使用它:ListAsSLL::SLLNode而不只是SLLNode
只需将其移动到类之外,以使包括“ ListAsSLL.h”在内的所有用户都可以使用它。


我更喜欢方法1,因为它可以使范围更小/更相关,但实际上并没有太多...。例如:

class ListAsSLL : public List
{
    public:
        struct SLLNode
        {
                Object* info;
                SLLNode* next;
        };
        ListAsSLL();

    protected:
        SLLNode* head;
        SLLNode* tail;
        SLLNode* cpos; //current postion;
        int count;

关于c++ - 如何解决“[错误]无效使用不完整类型'class SLLNode'”的链接列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40442498/

10-13 08:21