EDIT: Я забыл использовать пространство имен std. Это фиксировало некоторые ошибки, но не все.Я получаю сообщение об ошибке, когда пытаюсь использовать extern, чтобы иметь переменные в нескольких исходных файлах
Я делаю текстовую игру. Первоначально игра была в одном, основном исходном файле. Теперь, для простоты навигации (игра открытая, и я пытаюсь поощрять моддинг), я хочу разбить ее на несколько файлов. Естественно, для этого мне нужны переменные, которые работают во всех файлах.
Итак, я взял все свои глобальные переменные, переместил их в файл заголовка и ударил с них extern. Да, я определил их в основном исходном файле без extern.
Вот что заголовочный файл с определениями выглядит следующим образом:
#include <string>
extern string start; //Starts the game.
extern int scenario; //Holds the random number that decides the scenario that plays.
extern int roomScenario; // Holds the random number that decides what room scenario plays.
extern int isRandom = 1; //Holds whether the map is randomized. On by default.
extern int isSeedOn;//Holds whether the user can input a seed.
extern int isCodes = 1; //Holds whether the codes system is on. On by default.
extern int mapSeed; //The seed that the map creator uses.
extern int cD; //The current intersection the player is at. 0-15.
extern int deaths = 0; //The number of time the player has died. Zero by default.
extern int length = 16; //Length of catacombs. 16 by default.
extern int eLength = 15; //Effective length. Used to calculate whether the user is at the ladder.
extern int totalLives; //Total number of lives.
extern int lives; //Number of lives. Length/2.
extern int livesRemain; //Number of lives remaining. It's value is equal to 'lives' - 'deaths'.
extern int lastDiedOn; //Hold the intersection the player last died at. Will be used to leave the sketchpad to the next player.
extern bool msgRead; //Hold whether the player has read the killer's message. Determines which ending you get.
extern bool takenSheet; //Stuff with fore/farsight
extern string ladderDecision; //The decision of the player when they're at the ladder.
extern string option; //Holds what the player chooses in the options menu.
Вот некоторые ошибки я получаю:
На всех строковых переменных, я получаю эти два ошибки:
Error C2146: syntax error : missing ';' before identifier '[VARIABLE_NAME]'
Error C4430: missing type specifier - int assumed.
Не работает ли extern со строковыми переменными? Если нет, то какая альтернатива?
На всех строковых переменных, которые я определяют, (не показано выше сегмента файла заголовка) Я получаю эту ошибку, а также:
error C2440: 'initializing' : cannot convert from 'const char [VARIABLE_SIZE]' to 'int'
Опять же ехЬегп не работает со строковыми переменными?
Далее в моем заголовочном файле у меня есть три класса и некоторые массивы.
class intersect{
public:
string solve; //What the correct path is.
bool isCoffin; //Holds if the room is Scenario_2.
bool isSparkle; //Holds if the room is Scenario_1.
};
class foresight{
public:
string msg; //The message of this code.
string msg2; //The second message.
int intCalled; //What intersection the code was found at. (Both of the codes would be found at the same intersection)
bool isCalled; //If the the code has been found.
bool isCalled2; //If the second code has been found.
};
class farsight{
public:
string msg;
string msg2;
int intCalled; //All of these have the same purpose as the ones of the same name in foresight. Look there for the documentation.
bool isCalled;
bool isCalled2;
};
extern intersect int1, int2, int3, int4, int5, int6, int7, int8, int9, int10, int11, int12, int13, int14, int15, int16, int17, int18, int19, int20, int21, int22, int23, int24, int25, int26, int27, int28, int29, int30, int31, int32;
extern foresight fore1, fore2, fore3, fore4, fore5, fore6, fore7, fore8, fore9, fore10, fore11, fore12, fore13, fore14, fore15, fore16, fore17, fore18, fore19, fore20, fore21, fore22, fore23, fore24, fore25, fore26, fore27, fore28, fore29, fore30, fore31, fore32;
extern farsight far1, far2, far3, far4, far5, far6, far7, far8, far9, far10, far11, far12, far13, far14, far15, far16, far17, far18, far19, far20, far21, far22, far23, far24, far25, far26, far27, far28, far29, far30, far31, far32;
extern intersect ints[32] = { int1, int2, int3, int4, int5, int6, int7, int8, int9, int10, int11, int12, int13, int14, int15, int16, int17, int18, int19, int20, int21, int22, int23, int24, int25, int26, int27, int28, int29, int30, int31, int32 };
extern string msgs[32] = { msg1, msg2, msg3, msg4, msg5, msg6, msg7, msg8, msg9, msg10, msg11, msg12, msg13, msg14, msg15, msg16, msg17, msg18, msg19, msg20, msg21, msg22, msg23, msg24, msg25, msg26, msg27, msg28, msg29, msg30, msg31, msg32 };
extern foresight fore[32] = { fore1, fore2, fore3, fore4, fore5, fore6, fore7, fore8, fore9, fore10, fore11, fore12, fore13, fore14, fore15, fore16, fore17, fore18, fore19, fore20, fore21, fore22, fore23, fore24, fore25, fore26, fore27, fore28, fore29, fore30, fore31, fore32 };
extern farsight fars[32] = { far1, far2, far3, far4, far5, far6, far7, far8, far9, far10, far11, far12, far13, far14, far15, far16, far17, far18, far19, far20, far21, far22, far23, far24, far25, far26, far27, far28, far29, far30, far31, far32 };
extern string names[16] = { first1, first2, first3, first4, first5, first6, first7, first8, first9, first10, first11, first12, first13, first14, first15, first16 };
Каждая из переменных в Интс [] (с помощью пересекаются переменные, объявленные выше 32) массив, на первый план [] (с использованием 32 предвидению переменные, объявленные выше) массив, и САПС [] (Использование 32 форвардных переменных, указанных выше), генерирует ошибку. Ошибка говорит о том, что переменные в массивах повторно объявляют указанные выше переменные, просто они находятся в массиве. Смешно, но ... оригинальные объявления имеют одинаковую ошибку. Весело, правда?
И, наконец, последняя из ошибок в файле заголовка. Они появляются, когда я помещаю некоторые (но не все, по какой-то странной причине) пересекающиеся переменные в массив ints [].
На int1 и int4, я получаю ошибку:
IntelliSense: no suitable user-defined conversion from "intersect" to "std::string" exists
На int2 и INT3, я получаю ошибку:
IntelliSense: no suitable conversion function from "intersect" to "bool" exists
Это связано с членами данных, не так ли?
В любом случае, в исходном файле, я получаю даже еще ошибок! Ну, только одного типа.
Everytime я использую GetLine(), я получаю эту ошибку:
IntelliSense: no instance of overloaded function "getline" matches the argument list
argument types are: (std::istream, <error-type>)
Я хотел бы использовать GetLine(), как это:
getline(cin, start)
Что здесь происходит?
К счастью, это все из них, но это все еще много. (Более 400 в общей сложности!) Любая помощь будет принята с благодарностью!
вам не хватает 'зЬй ::' 'Перед string' – Hcorg
Я забыл об этом, и прошу прощения за ошибку такого новичка. Однако он не исправил все ошибки и даже добавил некоторые новые. Теперь все нестрочные переменные имеют множественную ошибку инициализации. – TheEliptarian
Вы не можете инициализировать extern vars, например 'extern int isRandom = 1;'. Инициализируйте их там, где они действительно определены. – deviantfan