关于名称空间的问题
头文件:
//namesp.h
//create the pers and debts namespaces
namespace pers
{
const int LEN = 40;
struct Person
{
char fname[LEN];
char lname[LEN];
};
void getPerson(Person &);
void showPerson(const Person &);
};
namespace debts
{
using namespace pers;
struct Debt
{
Person name;
double amount;
};
void getDebt(Debt &);
void showDebt(const Debt &);
double sumDebts(const Debt ar[],int n);
}
名称空间的实现文件:
//namesp.cpp -- namespace
#include<iostream>
#include"namesp.h"
namespace pers
{
using std::cout;
using std::cin;
void getPerson(Person & rp)
{
cout<<"Enter first name: ";
cin>>rp.fname;
cout<<"Enter last name: ";
cin>>rp.lname;
}
void showPerson(const Person & rp)
{
std::cout<<rp.lname<<", "<<rp.fname;
}
}
namespace debts
{
void getDebt(Debt & rd)
{
getPerson(rd.name);
std::cout<<"Enter debt: ";
std::cin>>rd.amount;
}
void showDebt(const Debt &rd)
{
showPerson(rd.name);
std::cout<<": $"<<rd.amount<<std::endl;
}
double sumDebts(const Debt ar[],int n)
{
double total = 0;
for(int i = 0;i<n;i++)
total+=ar[i].amount;
return total;
}
}
主函数:
#include<iostream>
#include"namesp.h"
void other(void);
void another(void);
int main(void)
{
using debts::Debt;
using debts::showDebt;
Debt golf = { {"Benny", "Goatsniff"},120.0};
showDebt(golf);
other();
another();
return 0;
}
void other(void)
{
using std::cout;
using std::endl;
using namespace debts;
Person dg={"Doodles","Glister"};
showPerson(dg);
cout<<endl;
Debt zippy[3];
int i;
for(i=0;i<3;i++)
getDebt(zippy[i]);
for(i=0;i<3;i++)
showDebt(zippy[i]);
cout<<"Total debt: $"<<sumDebts(zippy,3)<<endl;
return;
}
void another(void)
{
using pers::Person;
Person collector={"Milo","Rightshift"};
pers::showPerson(collector);
std::cout<<std::endl;
}
为什么在编译的时候会报如下错误:
Compiling...
namesp.cpp
D:\vc++\MSDev98\MyProjects\PB_9_10\namesp.cpp(26) : error C2065: 'getPerson' : undeclared identifier
D:\vc++\MSDev98\MyProjects\PB_9_10\namesp.cpp(32) : error C2065: 'showPerson' : undeclared identifier
Error executing cl.exe.
Creating browse info file...
PB_9_10.exe - 2 error(s), 0 warning(s)
当把名称空间实现文件中的getPerson(rd.name);改为pers::getPerson(rd.name);
把showPerson(rd.name);改为pers::showPerson(rd.name);就可以编译通过且运行正常.debts名称空间中不是已经包含了pers名称空间了吗?怎么还要特别指出呢?
我用的vc++6.0