c++ 中的链接错误& DirectX 文件包含问题

发布于 2024-11-17 07:45:56 字数 560 浏览 1 评论 0原文

我有两个头文件:

DirectX_Engine.h

#pragma once
#include "Main.h"
#include <d3d9.h>

和:

Main.h

#pragma once
#include <Windows.h>
#include "DirectX_Engine.h"

int imRunning = 1;

编译后,我收到以下链接器错误:

error LNK1169: one or more multiply defined symbols found
error LNK2005: "int imRunning" (?imRunning@@3HA) already defined in DirectX_Engine.obj

我还收到“文件未找到或#include“d3dx9.h”时出现目录不存在错误。有什么想法吗?

I have two header files:

DirectX_Engine.h

#pragma once
#include "Main.h"
#include <d3d9.h>

and:

Main.h

#pragma once
#include <Windows.h>
#include "DirectX_Engine.h"

int imRunning = 1;

After compiling, I get the following linker errors:

error LNK1169: one or more multiply defined symbols found
error LNK2005: "int imRunning" (?imRunning@@3HA) already defined in DirectX_Engine.obj

I'm also getting a 'file is not found or directory doesn't exist error' when #includeing "d3dx9.h". Any idea?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

哆啦不做梦 2024-11-24 07:45:56

两个想法。首先,将 DirectX_Engine.h 包含在 Main.h 中,并将 Main.h 包含在 DirectX_Engine.h 中。这显然行不通。

其次,int imRunning 被包含到每个包含 Main.h 的 .cpp 文件中,并且编译器将其视为定义。然后链接器看到每个文件中定义的 imRunning 并且不知道该怎么做。解决方案是使用 extern:

Main.h 中:

extern int imRunning;

其中一个 .cpp 文件中:

int imRunning = 1;

Two ideas. Firstly, you are including DirectX_Engine.h in Main.h and Main.h in DirectX_Engine.h. This will obviously not work.

Secondly, int imRunning gets included to each .cpp file that includes Main.h and the compiler treats it as a definition. Then the linker comes and sees imRunning defined in each of these files and doesn't know what to do. The solution is using extern:

In Main.h:

extern int imRunning;

In one of the .cpp files:

int imRunning = 1;
兮子 2024-11-24 07:45:56

d3dx9.h 不附带 VS 或 Platform SDK。您需要返回 MSDN 下载并获取 DirectX SDK。

d3dx9.h doesn't come with VS or Platform SDK. You'll need to go back to MSDN downloads and get DirectX SDK.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文