Конфликт векторных модулей включения c ++ - PullRequest
0 голосов
/ 09 декабря 2018

У меня проблема с включением векторного модуля.Кажется, есть конфликт с другими модулями.Вот структура:

В имитации.h:

#pragma once
#ifndef SIMULATION
#define SIMULATION

#include <ostream>
#include <sstream>
#include <string>

#include <algorithm>
#include <cstdlib>
// #include <vector>

#include "File.h"
...
void afficherResultat(std::vector<Client> sortie);
...
#endif

И в файле File.h:

#pragma once

#ifndef FILE
#define FILE

#include <vector>

class File {
    ...
    std::vector<Client> l;
    ...    
};

#endif

И я получаю 108 ошибок, начиная с:Предупреждение C4091 и ошибки C4430, C2065, C4229 ... Некоторые люди обращают внимание на порядок включений.Есть идеи?

1 Ответ

0 голосов
/ 09 декабря 2018

Вы определяете макрос для идентификатора, который является частью стандартной библиотеки:

#define FILE

(см. https://en.cppreference.com/w/cpp/io/c#Types, что такое FILE).

Это запрещено и может привести к очень странным ошибкам.

Вместо этого используйте имена, которые настолько уникальны, насколько это возможно, включая охранников, например, INCLUDE_GUARD_FILE_H.

Если у вас есть включенный охранник, есть такженет необходимости в #pragma once, который является нестандартным способом решения проблемы двойного включения, которую также должно предотвращать включение защиты.

Кроме того, вы не объявили Client в File.h.Возможно, отсутствует #include для заголовочного файла, определяющего Client.

...