c++ - c++:“重新声明”.cpp 中的外部命名空间变量
问题描述
我是 C++ 新手,遇到了这段代码:
文件.h
namespace Type
{
typedef BOOL (WINAPI *TYCopyFile)
(
PCHAR lpExistingFileName,
PCHAR lpNewFileName,
BOOL bFailIfExists
);
}
namespace Func
{
extern Types::TYCopyFile pCopyFileA;
}
文件.cpp
namespace Funcs
{
Types::TYCopyFile pCopyFileA;
}
void Init
{
Funcs::pCopyFileA = (Types::T_CopyFile) GetProcAddress(hKernel32, "CopyFileA");
}
这个想法很简单。我有()的命名空间,并在另一个命名空间typedef
( )中Types
创建函数指针Funcs
作为外部。File.cpp
然后我在函数中定义该函数指针Init
。
namespace Funcs
我的问题是为什么我需要重新声明File.cpp
?为什么我不能只拥有Init
可以初始化的函数Funcs::pCopyFileA
?据我了解extern
,它告诉编译器该变量存在于某处并告诉链接器找到它。为什么没有namespace Funcs
in链接器找不到它File.cpp
?
解决方案
推荐阅读
- google-data-studio - 如何在 Google Data Studio 中创建计算字段过滤器?
- javascript - Function.prototype.call.bind,返回一个被调用的函数,和使用.call的函数赋值之间的有效区别
- generator - Lambda Prolog 中的列表理解
- python - 使用 Asyncio 和 Aiohttp 下载数千张图片
- x86 - 在 AVX(及更高版本)中打包非连续向量元素
- python - 如何在 tfp.layers.DistributionLambda 中实例化包含变量的分布
- image - 在 Xamarin Forms 中加载图像时的回调
- python - Python - 如何获取有关 SyntaxError 的更多信息?
- pandas - 我得到 ValueError:一个系列的真值是不明确的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。使用熊猫
- php - 尝试使用 PHP 连接到 MySQL 时出错