C++ LNK2005 ошибка со структурой в заголовочном файле

У меня есть VS2013 C++ MFC Modeless Dialog, вызываемый из main{}, который имеет другие немодальные диалоги как дочерние.

Поскольку некоторые функции должны вызываться из дочерних элементов, у меня есть эти функции в заголовке common.h вместе со структурой, которая вызывает мою головную боль.

В общем. Ч у меня (сейчас)

struct L_ShotPointStruct { int x; int y; };
// I resorted to namespace because of other errors that the compiler was giving.
namespace LaserVid{
  L_ShotPointStruct L_shotsArray[100];
};

В common.h есть функция, которая ссылается на L_shotsArray, и функции в ChildDlg, которые также ссылаются на L_shotsArray.

В шапке ModelessDlg.h у меня есть

#include "common.h"
// edit..I had left this one out.
// needed to call the child dialog
#include "ChildDlg.h"
// edit 2
extern struct L_ShotPointStruct L_shotsArray[100];

using namespace LaserVid;

В скомпилированном ModelessDlg.cpp у меня конечно же есть

#include "ModelessDlg.h"

В немодальном заголовке ChildDlg1.h у меня есть

#include "common.h"
using namespace LaserVid;
// edit 2
extern struct L_ShotPointStruct L_shotsArray[100];

Когда я компилирую, я получаю ошибку LNK2005 "struct L_ShotPointStruct * LaserVid::L_shotsArray" (), уже определенную в ModelessDlg.obj

Правка 2: вышеуказанная ошибка повторяется для File: ChildDlg1, ChildDlg2, ChildDlg3 и основного объекта "view".

Я играл в Wack-A-Mole с кодом, чтобы это исправить. Я поместил объявление структуры в ModlessDlg.h вместо common.h. Я объявил структуру как

struct L_ShotPoint { int x; int y; };
typedef L_ShotPoint* L_PointsArr;
namespace LaserVid{
    L_PointsArr L_shotsArray = new L_ShotPoint[100];
};

И многое другое, но, что бы я ни делал, я вернусь к этому. Любые идеи, которые могут направить меня в правильном направлении? Считайте, что это горячая линия самоубийства.

Спасибо,

издание

0 ответов

Другие вопросы по тегам