如何解决“[错误]无效使用不完整类型'类SLLNode'”链接列表

时间:2016-11-05 19:45:13

标签: c++

嗨,我正在努力解决这个错误,当我尝试将链接列表传递给我拥有的另一个类时,我得到了这个错误。我已经查看过其他问题,但是他们似乎没有解决这个问题。

我还需要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();
        //////////////

提前致谢

1 个答案:

答案 0 :(得分:0)

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

所以你真的有两个选择(好吧,实际上还有很多选项),但是这里有两个选项将它封装在同一个文件中至少:

  1. 将SLLNode声明移至protected部分,然后使用它:public而不只是ListAsSLL::SLLNode
  2. 只需将其移到课堂外,即可让所有包含“ListAsSLL.h”的人都可以访问。
  3. 我更喜欢方法1,因为它使范围更小/更相关,但实际上没有多少......例如:

    SLLNode