Почему я должен добавить дополнительные токены перед оператором using? - PullRequest
1 голос
/ 08 февраля 2012

Functions.h

#include <iostream>
#include <windows.h>
#include <conio.h>
#include <limits>
#include <stdexcept>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include "definitions.h"
#include "globals.h"

};using namespace std;

Это в functions.h Теперь у нас есть main.cpp, который включает в себя заголовок

Main.cpp

#include "functions.h"

int main(int argc, char *argv[])
{
    //Other stuff
    return 0;
}

Дляпо какой-то причине я должен написать }; перед оператором using.Это не даст мне скомпилироваться, если только это не будет до него.

Есть идеи, почему?

1 Ответ

5 голосов
/ 08 февраля 2012

Эта ошибка, вероятно, вызвана отсутствием }; в файле globals.h.

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

И я знаю, что это не решит вашу проблему, но вы никогда не должны использовать using namespace std; в заголовочном файле, так как это загрязняет глобальное пространство имен для каждой единицы перевода, содержащей этот заголовок. Гораздо лучше сохранить операторы using namespace локальными для одного исходного файла, или еще лучше, просто наберите std::.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...