C++:.cpp中"Redeclare"外部命名空间变量
c++: "Redeclare" extern namespace variables in .cpp
我是新来的C ,并遇到了此代码:
file.h
namespace Type
{
typedef BOOL (WINAPI *TYCopyFile)
(
PCHAR lpExistingFileName,
PCHAR lpNewFileName,
BOOL bFailIfExists
);
}
namespace Func
{
extern Types::TYCopyFile pCopyFileA;
}
file.cpp
namespace Funcs
{
Types::TYCopyFile pCopyFileA;
}
void Init
{
Funcs::pCopyFileA = (Types::T_CopyFile) GetProcAddress(hKernel32, "CopyFileA");
}
这个想法真的很简单。我有typedef
(Types
(的命名空间,并在另一个名称空间(Funcs
(中创建功能指针作为外部。然后,我在Init
功能中的File.cpp
中定义了该功能指针。
我遇到的问题是为什么我需要在File.cpp
中重新 namespace Funcs
?为什么我不能只有Init
函数来初始化Funcs::pCopyFileA
?据我了解extern
,它告诉编译器,该变量存在于某个地方,并告诉链接器找到它。为什么在File.cpp
中没有namespace Funcs
的链接器找不到它?
对于C 中的所有符号,您都需要A 声明和a defution 。标题文件包含Func::pCopyFileA
的声明,源文件包含定义。
如果您在标题文件中定义了变量(即删除extern
关键字(,则该定义将在包含标头文件的所有翻译单元中完成。这打破了一个定义规则,链接时会导致多定义错误。
相关文章:
- 命名空间范围内的外部 - GCC vs clang vs msvc
- 在类设计中查找外部命名空间中的重载运算符
- C++ 中外部库的命名空间
- 在命名空间内部还是外部实现 c++ 函数?
- C++使用其他命名空间中的符号,而不使它们可从外部访问
- CERN 根:为命名空间中的外部"C"结构生成流处理器
- C++ 没有在命名空间外部声明的类主体的类
- 如何在命名空间中初始化外部变量
- 如何在命名空间中声明外部全局,然后定义它?
- C++:.cpp中"Redeclare"外部命名空间变量
- 有什么区别:在命名空间 yyy 外部和内部使用 namespae xxx?
- 外部常量,未命名的命名空间
- 命名空间外部变量的未定义参考/多重定义,C 结构问题
- 错误:LINK2019:在命名空间中使用运算符<<时未解析的外部符号
- 在命名空间前缀解析和优化级别依赖关系中使用外部"C" C++
- 如何在另一个命名空间中使用常量定义的外部
- 未命名命名空间中名称的外部链接
- 在何处使用在翻译单元、命名空间内部或外部使用声明
- 当外部命名空间具有具有相同名称的成员时,访问未命名命名空间的成员
- 在查找期间在std命名空间中拖动外部命名空间