c++前向宣言不管用

c++前向声明不管用class ArcIterVexNode::~VexNode(){ArcIter iter(this-firstInArc) while(!iter.isEnd

c++前向声明不管用
class ArcIter
VexNode::~VexNode()
{
    ArcIter iter(this->firstInArc);
 while(!iter.isEnd)
 {
  ArcNode* ptemp=iter.pArcNode;
  iter.nextComDes();
  delete ptemp;
 }
    
 //ArcIter iter(firstOutArc);
  
}

错误如下

1>..\source\JunkSmsSender.cpp(48) : error C2079: 'iter' uses undefined class 'ArcIter'(我已经前向声明了ArcIter这个类,怎么还这样?)
1>..\source\JunkSmsSender.cpp(48) : error C2440: 'initializing' : cannot convert from 'ArcNode *' to 'int'
1>        There is no context in which this conversion is possible
1>..\source\JunkSmsSender.cpp(49) : error C2228: left of '.isEnd' must have class/struct/union


 

class ArcNode
{
 friend class AdjList;
 friend class ArcIter;
 friend class JunkSmsFilter;
public:
 ArcNode();
 ArcNode(VEXID mdest,VEXID msrc); 
private:
 VEXID dest;  // 标示弧指向的那个顶点,比邻接表多出一个顶点
    VEXID src;  // 标示弧指向的那个顶点,比邻接表多出一个顶点
 int weight; // 有多少个边
 ArcNode* nextArc_comSrc;//十字链表的横向链接出度边
 ArcNode* nextArc_comDes;//十字链表的纵向链接出度边
};
ArcNode::ArcNode()
{

   nextArc_comSrc=NULL;
   nextArc_comDes=NULL;
}
ArcNode::ArcNode(VEXID msrc,VEXID mdest)
{
   dest=mdest;
   src=msrc;
   weight=1;
   nextArc_comSrc=NULL;
   nextArc_comDes=NULL;
}


class ArcIter
{
public:

 ArcIter(ArcNode*);
 ArcNode* nextComDes();
 ArcNode* nextComSrc();
 bool isEnd();
private:
 ArcNode* pArcNode;
 
};
ArcIter::ArcIter(ArcNode* piter)
{
    pArcNode=piter;  
}
ArcNode* ArcIter::nextComDes()
{
 pArcNode=pArcNode->nextArc_comDes;
 return pArcNode;
}
ArcNode* ArcIter::nextComSrc()
{
 pArcNode=pArcNode->nextArc_comSrc;
 return pArcNode;
}
bool ArcIter::isEnd()
{
 if(pArcNode==NULL) return true;
 return false;
}

[解决办法]
前向声明只管能声明类型的指针(不完全类型),其他的都不管用(比如访问类型成员)。

[解决办法]

引用:
前向声明只管能声明类型的指针(不完全类型),其他的都不管用(比如访问类型成员)。

+1

另外 引用也可以前置声明
[解决办法]
class ArcIter,请在你用到的地方#inlude 该头文件即可!
[解决办法]
在头文件才可能使用向前声明,源文件怎么可能使用向前声明的。在源文件里面,你要用到向前声明的那个类的一些函数,你使用函数,你就得告诉编译器,你的这个类是怎么定义的。
在头文件,你可能并不需要用到这个类的内部东西,这时你才可以向前声明。