class CManager  
{ CObArray m_list;
public:
void AddTail(CBooks*pBook);//在链表尾部放书籍
void AddHead(CBooks*pBook); //在链表头部放书籍
void Add(CBooks*pBook,int index);//将书籍放到index处
void Delete(int index);//删除index处的书籍
void Fit(int index);//修改index处的书籍
CBooks* GetBook(int index);//获取index出的书籍
CManager();
virtual ~CManager();
virtual int Find(void*para,CObArray&list);                                  
virtual void Delete (void*para);                                 
virtual void Sort();
void Serialize(CArchive&ar);
friend  ostream& operator << (ostream& os,CManager &mg);
_________________________________________________________________________________________
#include "stdafx.h"
#include "CBooksApp.h"
#include "Manager.h"
#include "ManagerTitle.h"CManagerTitle::CManagerTitle():m_pParent(0){}
int CManagerTitle::Find(void*para,CObArray&list)
{
if(!m_pParent)
return 0;
CString pStr = (char*)para;
int i,value=-1,num=m_pParent->m_list.GetSize();
for(i=0;i<num;i++)
{
CBooks*p=(CBooks*) m_pParent->m_list[i];
if(p->m_title==pStr)
{
list.Add(p);
if(value<0)
value=i;
}
}
return value;
}void CManagerTitle::Delete (void*para)
{
 if(!m_pParent)
return;
CString pStr= (char*)para;
 int i=0;
while(i< m_pParent->m_list.GetSize())
{
CBooks*p=(CBooks*) m_pParent->m_list[i];
if(p->m_title==pStr)
{
delete p;
m_pParent->m_list.RemoveAt(i);
}
else
i++;
}
}
void CManagerTitle::Sort()

if(!m_pParent)
return;
int i,j,num;
for(i=0;i<num;i++)
{
CBooks* b1=(CBooks*) m_pParent->m_list[i];
for(j=i+1;j<num;j++)
{
CBooks*b2=(CBooks*) m_pParent->m_list[j];
if(b2->m_title<b1->m_title)
{
m_pParent->m_list.RemoveAt(i);
m_pParent->m_list.InsertAt(i,b2);
m_pParent->m_list.RemoveAt(j);
m_pParent->m_list.InsertAt(j,b1);
b1=b2;
}
}
}
}错误:ksApp\ManagerTitle.cpp(37) : error C2248: 'm_list' : cannot access private member declared in class 'CManager'
        \cbooksapp\manager.h(19) : see declaration of 'm_list'
\CBooksApp\ManagerTitle.cpp(40) : error C2248: 'm_list' : cannot access private member declared in class 'CManager'
       cbooksapp\manager.h(19) : see declaration of 'm_list'
\CBooksApp\ManagerTitle.cpp(57) : error C2248: 'm_list' : cannot access private member declared in class 'CManager'
       \cbooksapp\manager.h(19) : see declaration of 'm_list'
\CBooksApp\ManagerTitle.cpp(59) : error C2248: 'm_list' : cannot access private member declared in class 'CManager'
       cbooksapp\manager.h(19) : see declaration of 'm_list'
\CBooksApp\ManagerTitle.cpp(63) : error C2248: 'm_list' : cannot access private member declared in class 'CManager'
        \cbooksapp\manager.h(19) : see declaration of 'm_list'不知道如何去做!
现在正在做课设,是关于一个小型的图书管理系统,好多问题不能解决,希望大家多多指教~~不胜感激,本人VC学的很菜,~~~望大家给帮下~~~

解决方案 »

  1.   

    friend class xxx成为友元
      

  2.   

    不是你已经有用到这个了么。。friend  ostream& operator << (ostream& os,CManager &mg);如果你想把整个类都变为friend 可以这样class CManager 
    {
    //.....
      friend class AAA 
    }那么AAA就可以访问CManager的所有成员。。包括私有的。。
      

  3.   

    请问,这样的话,那么那私有的数据对与CMangagertTitle 来说不就是和公共一样了吗?
      

  4.   

    m_pParent 如果是基类的话,把你的m_list成员变为 Protected 的就行,如果不是可以提供一个接口函数来访问,friend破坏封装不到不得已就别用了。CObArray& GetList()
    {
         return m_list;
    }
      

  5.   

    你想用 m_list干什么事情就调用CManager得相应成员函数, 如果没有相应成员, 就添加之