- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在标题中定义了一个字符数组
//header.h
const char* temp[] = {"JeffSter"};
标题如果#defined protected 并且在顶部有一个#pragma once。如果这个 header 包含在多个地方,我会得到一个 LNK4006 - char const * * temp 已经在 blahblah.obj 中定义。所以,我对此有几个问题
最佳答案
Why does this happen if I have the guards in place? I thought that they prevented the header from being read in after the first access.
Include guards 确保标题在一个文件(翻译单元)中只包含一次。对于包含标题的多个文件,您希望标题包含在每个文件中。
通过定义,与在头文件中声明具有外部链接(全局变量)的变量相反,您只能在一次源文件中包含头文件。如果在多个源文件中包含头文件,就会出现一个变量的多个定义,这在C++中是不允许的。
因此,正如您所发现的,正是出于上述原因,在头文件中定义变量是个坏主意。
Why do the numerous enums in this header not also give the LNK4006 warnings?
因为,它们没有定义“全局变量”,它们只是关于类型等的声明。它们不保留任何存储空间。
If I add static before the signature, I don't get the warning. What are the implications of doing it this way.
当您将变量设置为static
时,它具有static 作用域。该对象在定义它的翻译单元(文件)之外是不可见的。因此,简单来说,如果您有:
static int i;
在您的 header 中,包含 header 的每个源文件都将获得一个单独的 int
变量i
,它在外部是不可见的源文件。这称为内部链接。
Is there a better way to do this that avoids the error, but lets me declare the array in the header. I would really hate to have a cpp file just for an array definition.
如果您希望该数组成为所有 C++ 文件中可见的一个对象,您应该这样做:
extern int array[SIZE];
在您的头文件中,然后将头文件包含在所有需要变量array
的C++ 源文件中。在一个源文件(.cpp
)中,您需要定义array
:
int array[SIZE];
您还应该在上述源文件中包含 header ,以允许捕获由于 header 和源文件中的差异而导致的错误。
基本上,extern
告诉编译器“array
已在某处定义,类型为 int
,大小为 SIZE
”。然后,您实际上只定义 array
一次。在链接阶段,一切都很好地解决。
关于c++ - 接头防护装置和 LNK4006,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2105716/
我的印象是 header guards 解决了重新定义的问题。我收到链接器错误,指出 .obj 文件中存在重新定义。这是我包含的 header ,问题在于所有全局声明的重新定义。 #ifndef DI
我正在 Microsoft Azure 中运行企业级应用程序。我想知道 Microsoft Azure 中 DDOS 投影的建议是什么。该文档明确指出该平台受到 DDOS 保护,但没有提供更多详细信息
我正在用 laravel sanctum 进行测试,但这里有一些问题.. 我正在创建管理员守卫。 当我将中间件更改为 auth:sanctum_admin .. 它应该只能由管理员访问,但在这里我可以
我有一个带有延迟加载模块的 Angular 4.3.6 应用程序。这是部分根路由器: const routes: Routes = [ { path: '', redirectTo: 'fleet
我有 Vaadin UI 的后端。我想保护后端数据库免受XSS攻击。对于 Vaadin UI 的 XSS 防护,您有何建议? 最佳答案 Vaadin 内置了 XSS 保护。所有组件都正确转义/编码 h
我正在尝试提高我的应用程序的安全性。每当我从用户(无论是通过 POST 还是 GET)接收到应该是整数的数据时,我都会适本地对其进行验证。但通常数据是 VARCHAR,有时可以包含 HTML。 在这种
我有一个具有此功能的服务,它会在 token 有效或无效时返回 true 或 false loggedIn() { return this.http.get('http://localhost:300
我们的应用程序中有几条路线,用户不应通过直接在浏览器的地址栏中输入网址来导航这些路线。 相反,当我们使用 router.navigate() 通过我们的应用程序逻辑以编程方式导航时,我们只想让它们可访
我通常在 .NET 中编写我的 SQL sql.Append("SELECT id, code, email FROM mytable WHERE variable = @variable "); 然
我需要同时将多行(1000 行)插入到 SQL Server 数据库中。我认为最好的方法是使用 SqlBulkCopy 但我不确定如何参数化插入查询以防止 SQL 注入(inject)。 你能帮我一下
Laravel 5.7 PHP 7.2.10 目前我可以使用 Web 和 api 防护中的任何一个,是否有任何方法可以同时允许两者,以便 Web 应用程序和 api 能够协同工作。 类似的东西 ret
Guard 总是因为这个问题而困扰我: .../gems/bundler-1.6.2/lib/bundler/runtime.rb:34:in `block in setup': You have a
我正在尝试通过 gmail api 从 Google 获取邮件 在收到 token 后对 Google_Client 进行身份验证时出现此错误 fatal error :未捕获异常“Google_Au
我是一名优秀的程序员,十分优秀!