Глобальный "enum" не подхватывает подключаемый класс
Думал, что объявив enum в глобальной области видимости, пространство имен будет видно во всей программе, но столкнулся вот с чем:
#Я подключаю нужные библиотеки
#Подключаю defin
#Затем подключаю enum direction { RIGHT, LEFT, UP, DOWN };
#include "textRect.h" затем подключаю хедер своего класса,
который рисует квадрат из знаков.
В этом классе есть функция void move(direction dir); в которой
я хочу использовать это пространство имён.
Вот на этот direction dir компилятор и ругается, говорит что он не определён. Когда собираю всё в одном файле main.cpp, всё работает, отдельно подсоединяю класс, начинает жаловаться.
Хотелось бы узнать почему? Ведь direction в глобальной области видимости. Пытался самостоятельно найти ответ на этот вопрос, не получилось, заранее признателен за помощь.
#include <windows.h>
#include <conio.h>
#include <iostream>
#define KEY_ARROW_UP 72
#define KEY_ARROW_RIGHT 77
#define KEY_ARROW_DOWN 80
#define KEY_ARROW_LEFT 75
using namespace std;
enum direction { RIGHT, LEFT, UP, DOWN };
#include "textRect.h"
Ответы (1 шт):
При сборке два .cpp файла компилируются отдельно. В первом файле main.cpp тип enum direction определён, а во втором textRect.cpp - нет. Вы в обоих .cpp файлах делаете подлючение textRect.h, вот и определение enum нужно прописывать в хедер, чтобы двум компиляциям хватило информации.
textRect.h :
enum direction { RIGHT, LEFT, UP, DOWN };
class textRect
{ ...