65,186
社区成员




#include "map"
#include "iostream"
#include "afxwin.h"
using namespace std;
//使用友元函数,控制只有类Container的AddElement函数可以修改类Element的ElementIndex属性,其他类在不能修改类Element的ElementIndex属性
//可是在编译时提示“error C2027: use of undefined type 'Container'”
//请问问题在哪,怎么修改?
//对Container类的提前引用声明
class Container;
class Element
{
public:
Element(){};
~Element(){};
CString Name;
CString Value;
public:
//返回元素在容器中的序号
int GetElementIndex()
{
return mElementIndex;
}
// //设置元素在容器中的序号
// void SetElementIndex(int ElementIndex)
// {
// mElementIndex=ElementIndex;
// }
friend void Container::AddElement(Element Data);
private :
int mElementIndex;
};
class Container
{
public:
Container()
{
mCount=0;
}
~Container(){};
//获取元素个数
int GetElementCount()
{
return mCount;
}
//根据名称获取元素对象
Element& GetElement(int index)
{
return mMap[index];
}
//增加元素
void AddElement(Element Data)
{
//Data.SetElementIndex(mCount) ;
//访问Element的私有变量
Data.mElementIndex=mCount;
mMap.insert(pair<int,Element>(mCount,Data)) ;
mCount=mCount+1;
}
private:
int mCount;
map<int,Element> mMap;
};
int main()
{
Element eltA,eltB,eltC;
Container ctn;
eltA.Name="Element_A";
eltA.Value="100";
eltB.Name="Element_B";
eltB.Value="200";
eltC.Name="Element_B";
eltC.Value="300";
ctn.AddElement(eltA) ;
ctn.AddElement(eltB) ;
ctn.AddElement(eltC) ;
for (int i=0;i<ctn.GetElementCount();i++)
{
cout<<(LPCTSTR)ctn.GetElement(i).Name<<" "<<(LPCTSTR)ctn.GetElement(i).Value<<endl;
}
return 0;
}
class Element;
class Container
{
public:
Container()
{
mCount=0;
}
~Container(){};
//获取元素个数
int GetElementCount()
{
return mCount;
}
//根据名称获取元素对象
Element& GetElement(int index)
{
return mMap[index];
}
//增加元素
void AddElement(Element *Data);
private:
int mCount;
map<int,Element> mMap;
};
class Element
{
public:
Element(){};
~Element(){};
string Name;
string Value;
public:
//返回元素在容器中的序号
int GetElementIndex()
{
return mElementIndex;
}
// //设置元素在容器中的序号
// void SetElementIndex(int ElementIndex)
// {
// mElementIndex=ElementIndex;
// }
friend void Container::AddElement(Element *Data);
private :
int mElementIndex;
};
void Container::AddElement(Element *Data){
//Data.SetElementIndex(mCount) ;
//访问Element的私有变量
Data->mElementIndex=mCount;
mMap.insert(pair<int,Element>(mCount,*Data)) ;
mCount=mCount+1;
}
int main()
{
Element eltA,eltB,eltC;
Container ctn;
eltA.Name="Element_A";
eltA.Value="100";
eltB.Name="Element_B";
eltB.Value="200";
eltC.Name="Element_B";
eltC.Value="300";
ctn.AddElement(&eltA) ;
ctn.AddElement(&eltB) ;
ctn.AddElement(&eltC) ;
for (int i=0;i<ctn.GetElementCount();i++)
{
cout<<ctn.GetElement(i).Name<<" "<<ctn.GetElement(i).Value<<endl;
}
system("pause");
return 0;
}
不过我将CString 改成了string
#include <map>
#include <iostream>
using namespace std;
class A;
class B
{
public:
void dosth()
{
}
public:
map<int,A> a;
};
class A
{
friend void B::dosth();
};
int main()
{
B b;
b.a[1]=A();
return 0;
}
楼主的情况修改后是这样,我不改你代码了,对照理解一下.