很久没有用C++写过有一丢丢难度的程序了,概念都快忘记的差不多了,今天想在一个类中声明其他名字空间的友元都弄了好久,特记录下来,以算警醒
情况如下:
有两个名字空间NA和NB,在他们中,分别有如下类的定义
文件HA.h
#pragma once
#include <iostream>
using namespace std;
// 必须声明下
namespace NB
{
class CB;
}
namespace NA
{
class CA
{
friend class NB::CB;
friend class CA2;
protected:
void print()
{
cout << "fsdfsdfs" << endl;
}
};
}
文件HA2.h
#pragma once
#include <iostream>
#include "HA.h"
using namespace std;
namespace NA
{
class CA2
{
public:
void print()
{
NA::CA a;
a.print();
}
};
}
文件HB.h
#pragma once
#include <iostream>
#include "HA.h"
using namespace std;
namespace NB
{
class CB
{
public:
void print()
{
NA::CA a;
a.print();
}
};
}
一开始没有加
namespace NB
{
class CB;
}
那段代码,编译器老是报错,应该是不知道这个类的定义,所以必须前置声明一下
不过让我有点疑惑的是,在另一个文件的同一个名字空间中,定义了一个CA2的类,为什么不需要前置声明就可以直接使用??望高人讲解一下
就这么多了,记下来就好了