嗨,我正在尝试解决此错误,当我尝试将链接列表传递给我拥有的另一个类时遇到此错误。我浏览了其他问题,但似乎没有一个可以解决此问题。
我还需要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/