今天在写C++程序时,发现了一个很费解的问题,就是当我们在一个头文件 header.h 内定义一个命名空间时,其内部的类必须定义好才能使用,而不能只单纯作声明,在其他文件中作定义。在此我写了一个包含三个文件的程序
//header.h
#include <iostream>
namespace A{
class Circle; //Circle类声明
}
//main.cpp
#include "header.h"
int main()
{
using namespace A;
Circle c(0.0,5.0);
c.printCircle();
}
//namespace.cpp
#include "header.h"
namespace A
{
class Circle //Circle类完整定义
{
private:
double mid;
double radius;
public:
Circle(double m = 0,double r = 0):mid(m),radius(r){}
void printCircle();
};
void Circle::printCircle()
{
std::cout<<"r = "<<radius<<std::endl;
std::cout<<"m = "<<mid<<std::endl;
}
}
使用VS2010运行以上程序,弹出了四个错误:
错误