У меня есть кнопка класса, которая включает в себя класс ButtonManager, который управляет кнопками.
Тогда у меня есть 2 функции, которые обрабатывают вещи, 1 - это окно входа в систему с несколькими кнопками, второе - это меню игры, в котором также есть кнопки.
Тем не менее, в двух окнах достаточно много строк, поэтому я решил разделить его на несколько файлов.cpp, где я просто вызываю материал из основного.
Проблема в том, что мне нужно включить класс кнопки в.cpps и main, а вторичный cpp также включает в себя некоторый dummy.h
который содержит объявление общей функции, отображающей меню.
Основная проблема заключается в том, что ButtonManager имеет глобальную переменную, и при компиляции он говорит, что символ уже определен.
Пример кода:
ah (действует так, как если бы это был заголовочный файл Button Manager):
#ifndef _ABC_
#define _ABC_
struct A{
int b;
}a = A();
#endif
side.h (скажем, это для основного игрового окна):
#ifndef _SIDE_H_
#define _SIDE_H_
int callSomething();
#endif //_SIDE_H_:
side.cpp:
#include "side.h"
#include "abc.h"
#include <iostream>
int callSomething()
{
std::cout << a.b << "\n";
return a.b;
}
main.cpp:
#include "abc.h"
#include "side.h"
#include <iostream>
int main()
{
callSomething();
std::cin.get();
}
Когда я пытаюсь скомпилировать его, компилятор жалуется:
1>side.obj: error LNK2005: "struct A a" (?a@@3UA@@A) already defined in DynamicDispatch.obj 1>H:\Microsoft Visual Studio 11.0\example\Debug\dynamicdispatch.exe: fatal error LNK1169: one or more multiply defined symbols found
Вся помощь приветствуется
В ah
объявить переменную as
struct A{
int b;
};
extern struct A a;
Затем в main.cpp определите его один раз:
struct A a;
int main()
{
//...
}
main
хе-хе
mian
extern
, но как применить ключевое словоextern
к переменной, определенной таким образом? Я только зашел так далеко, что если я#include "abc.h"
изmain.cpp
он работает, но тогда я не могу использоватьstruct A
вmain.cpp