- 论坛徽章:
- 0
|
我在程序中遇到一个和作用域有关的问题。可以简化为如下的描述:
//firstdef.h
#ifndef _FIRSTDEF_H
#define _FIRSTDEF_H
typedef char Boolean;
#endif
//outsidedef.h
#ifndef _OUTSIDEDEF_H
#define _OUTSIDEDEF_H
namespace OUT
{
typedef long Boolean;
};
#endif
//seconddef.h
#ifndef _SECONDDEF_H
#define _SECONDDEF_H
#include "outsidedef.h"
using namespace OUT;
namespace DEF
{
Boolean seconddef;
};
#endif
//my.cpp
#include <iostream>;
#include "firstdef.h"
#include "seconddef.h"
using namespace DEF;
int main(int argc, char* argv[])
{
Boolean firstb;
firstb = 'c';
seconddef = 12;
std::cout<<firstb<<std::end;
std::cout<<seconddef<<std::endl;
return 0;
}
我的编译器是Sun上的Forte C++ 6.0 Update 2。
#CC my.cpp -o my
后,提示出现如下的错误:
"my.cpp", line 10; Error: The name Boolean is ambiguous, Boolean
and OUT::Boolean
1 Error(s) detected.
这应该是一个二义性的错误。问题是如果seconddef.h被很多程序使用,改变
seconddef.h时会需要重新编译这些程序。
请问有没有什么好的办法不改变seconddef.h、firstdef.h和outsiddef.h解决
这个错误呢?
请大家赐教,如果必须改,怎么改会最好呢?
bow! |
|