您好,我正在努力解决这个错误,当我尝试将链接列表传递给我拥有的另一个类时遇到这个错误。我查看了其他问题,但似乎没有一个能解决这个问题。
我还需要 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 中,从使用它的外部类的角度来看,它只能访问公共(public)成员。如您所见,您的 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;
我是一名优秀的程序员,十分优秀!