提问人:H.v.M. 提问时间:10/19/2023 最后编辑:H.v.M. 更新时间:10/19/2023 访问量:97
内联定义的“错误 LNK2005:已在 .obj 中定义”
"error LNK2005: already defined in .obj" for inline definition
问:
我使用的是 Microsoft Visual Studio Professional 2017 版本 15.6.6。我创建了一个 Visual C++ 空项目并添加了以下内容:
Foo.h:
#pragma once
struct Foo
{
static Foo F1;
};
inline Foo Foo::F1;
条形.cpp:
#include "Foo.h"
Baz.cpp:(来自 https://stackoverflow.com/a/65078857/1715765)
#include <sdkDdkVer.h>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#pragma runtime_checks("", off)
#pragma comment(linker, "/nodefaultlib /subsystem:windows /ENTRY:test")
int __stdcall test(void) { ExitProcess(0); }
#include "Foo.h"
编译时我得到以下内容。如果我删除一个,它会编译得很好#include "Foo.h"
Baz.obj : error LNK2005: "public: static struct Foo Foo::F1" (?F1@Foo@@2U1@A) already defined in Bar.obj
为什么它不起作用?
答:
0赞
user17732522
10/19/2023
#1
对我来说,看起来像是编译器错误或不合规。
如果我忽略示例中所有特定于 Windows/MSVC 的内容,那么这是一个有效的标准 C++ 程序(除了缺少)。main
评论
#include "Foo.h"