stdafx.cpp 中的变量定义
definition of variable in stdafx.cpp
我有 visual studio 解决方案,其中包含各种 C++ 项目。为简单起见,有两个项目。一个用于 .lib,另一个用于 .exe。两个项目都使用预编译头 stdafx.h
。但是预编译头在项目之间是共享的。
最近有人在 stdafx.cpp
中放置了变量的定义,因为它在项目之间共享,所以我得到:
error LNK2005: "int x" (?x@@3HA) already defined in stdafx.obj
所以我的问题是:是否可以将定义放入预编译头文件中?(在创建预编译头文件的 cpp 部分中)
我猜预编译头文件应该只包含符号声明而不是定义。还是我错了?
通常您不想在 any header 中定义变量。
当包含 header 时,它会在编译开始前有效地粘贴到包含文件中。这意味着 header 中定义的任何内容都将在每个文件中重复,包括 header。这通常可以很好地编译,但会给链接器留下一个问题,即确定哪个定义是真正的定义。
如果每个人都共享一个 x
,请放置
extern int x;
在 header 和
中
int x;
在适当的 cpp 文件中。
如果每个包含器都有自己的私有x
static int x;
进入 header,但我个人认为这是一个丑陋的闪避,您应该尝试变通。
至于将 header 以外的内容放入 stdafx 是否合法,我真的不知道。从来没有做过。我知道这不是 stdafx.h 的用途,您只想从不会作为 stdafx.h 项目的一部分进行修改的库中放入 headers,所以我不会做的。
推荐阅读:Purpose of stdafx.h, What's the use for "stdafx.h" in Visual Studio?, and How to use stdafx.h properly?
我有 visual studio 解决方案,其中包含各种 C++ 项目。为简单起见,有两个项目。一个用于 .lib,另一个用于 .exe。两个项目都使用预编译头 stdafx.h
。但是预编译头在项目之间是共享的。
最近有人在 stdafx.cpp
中放置了变量的定义,因为它在项目之间共享,所以我得到:
error LNK2005: "int x" (?x@@3HA) already defined in stdafx.obj
所以我的问题是:是否可以将定义放入预编译头文件中?(在创建预编译头文件的 cpp 部分中)
我猜预编译头文件应该只包含符号声明而不是定义。还是我错了?
通常您不想在 any header 中定义变量。
当包含 header 时,它会在编译开始前有效地粘贴到包含文件中。这意味着 header 中定义的任何内容都将在每个文件中重复,包括 header。这通常可以很好地编译,但会给链接器留下一个问题,即确定哪个定义是真正的定义。
如果每个人都共享一个 x
,请放置
extern int x;
在 header 和
中int x;
在适当的 cpp 文件中。
如果每个包含器都有自己的私有x
static int x;
进入 header,但我个人认为这是一个丑陋的闪避,您应该尝试变通。
至于将 header 以外的内容放入 stdafx 是否合法,我真的不知道。从来没有做过。我知道这不是 stdafx.h 的用途,您只想从不会作为 stdafx.h 项目的一部分进行修改的库中放入 headers,所以我不会做的。
推荐阅读:Purpose of stdafx.h, What's the use for "stdafx.h" in Visual Studio?, and How to use stdafx.h properly?