Ошибка ссылки в c ++ и DirectX файл включает проблему - PullRequest
2 голосов
/ 26 июня 2011

У меня есть два заголовочных файла:

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 ing "d3dx9.h".Есть идеи?

Ответы [ 2 ]

1 голос
/ 26 июня 2011

Две идеи. Во-первых, вы включаете DirectX_Engine.h в Main.h и Main.h в DirectX_Engine.h. Это, очевидно, не будет работать.

Во-вторых, int imRunning включается в каждый файл .cpp, который включает Main.h, и компилятор рассматривает его как определение. Затем приходит компоновщик и видит imRunning, определенный в каждом из этих файлов, и не знает, что делать. Решение использует extern:

В Main.h:

extern int imRunning;

В один из .cpp файлов:

int imRunning = 1;
0 голосов
/ 26 июня 2011

d3dx9.h не поставляется с VS или Platform SDK.Вам нужно будет вернуться к загрузкам MSDN и получить DirectX SDK.

...