Что делать, если программа не компилируется? Переопределение C++
Есть четыре файла:
sfile.cpp
button.h
drawing_core.h
drawing_core.cpp
Вот их содержимое:
//drawing_core.h:
#include <windows.h>
#include <stdio.h>
HWND wnd;
HDC dc;
HBRUSH brush;
HPEN pen;
void start();
void setMainClr(int clr);
void setOutlineClr(int clr);
void setClr(int clr);
void end();
void rectangle(int x, int y, int w, int h);
void to(int x, int y);
void line(int x, int y);
//drawing_core.cpp:
#include <windows.h>
#include "drawing_core.h"
void start() {
wnd = GetConsoleWindow();
dc = GetDC(wnd);
}
void setMainClr(int clr) {
DeleteObject (brush);
brush = CreateSolidBrush(clr);
SelectObject (dc, brush);
}
void setOutlineClr(int clr) {
DeleteObject (pen);
pen = CreatePen(PS_SOLID, 1, clr);
SelectObject (dc, pen);
}
void setClr(int clr) {
setOutlineClr(clr);
setMainClr (clr);
}
void rectangle(int x, int y, int w, int h) {
Rectangle(dc, x, y, x + w, y + h);
}
void to(int x, int y) {
MoveToEx(dc, x, y, 0);
}
void line(int x, int y) {
LineTo(dc, x, y);
}
void end() {
DeleteObject(brush);
DeleteObject(pen);
ReleaseDC (wnd, dc);
}
//button.h:
#include <iostream>
#include "drawing_core.h"
class button {
public:
int x = 0;
int y = 0;
int w = 100;
int h = 50;
int background_color = RGB(96, 96, 96);
int foreground_color = RGB(0, 0, 0);
std::string text = "Text";
button(int tx, int ty, int tw, int th, std::string ttext) {
this->x = tx;
this->y = ty;
this->w = tw;
this->h = th;
this->text = ttext;
}
void draw() {
setMainClr(this->background_color);
rectangle(this->x, this->y, this->w, this->h);
TextOut(dc, this->x, this->y, (LPCWSTR)this->text.c_str(), 10);
}
};
// sfile.cpp:
#include <iostream>
#include <windows.h>
#include "drawing_core.h"
#include "button.h"
using namespace std;
int main() {
start();
button b1(0, 0, 100, 50, "Hello World!");
b1.draw();
end();
while (1);
return 0;
}
Когда я запускаю компиляцию, вылезает ошибка:
HBRUSH brush: переопределение
HDC dc: переопределение
HPEN pen: переопределение
HWND wnd: переопределение
Как убрать эту ошибку?
Ответы (1 шт):
Автор решения: AlexGlebe
→ Ссылка
В заголовочном файле .h глобальные переменные предварительно объявите с приставкой extern :
extern HWND wnd;
extern HDC dc;
extern HBRUSH brush;
extern HPEN pen;
а в одном из .cpp файлов их место окончательно определите :
HWND wnd;
HDC dc;
HBRUSH brush;
HPEN pen;