Компилятор Intel C ++ в Windows катастрофическая ошибка: не удается открыть исходный файл "bits / unique_ptr.h" - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь использовать компилятор Intel C ++ 19.0 для компиляции моего кода в Windows.Я использую следующий вызов:

icl /Qstd=c++11 c:\Users\Bernardo\Downloads\HW1_6200\ProjectAmina\WaterPaths\src\SystemComponents\Utility\Utility.cpp

Несмотря на то, что этот код компилируется в системах Linux, когда я пытаюсь скомпилировать его в Windows, я получаю следующую ошибку:

c:\Users\Bernardo\Downloads\HW1_6200\ProjectAmina\WaterPaths>icl /Qstd=c++11 c:\Users\Bernardo\Downloads\HW1_6200\ProjectAmina\WaterPaths\src\SystemComponents\Utility\Utility.cpp
Intel(R) C++ Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 19.0.3.203 Build 20190206
Copyright (C) 1985-2019 Intel Corporation.  All rights reserved.

Utility.cpp
c:\Users\Bernardo\Downloads\HW1_6200\ProjectAmina\WaterPaths\src\SystemComponents\Utility\Utility.h(10): catastrophic error: cannot open source file "bits/unique_ptr.h"
  #include <bits/unique_ptr.h>
                              ^

compilation aborted for c:\Users\Bernardo\Downloads\HW1_6200\ProjectAmina\WaterPaths\src\SystemComponents\Utility\Utility.cpp (code 4)

По какой-то причине в моей стандартной библиотеке нет интеллектуальных указателей.Чего мне не хватает?

Ответы [ 2 ]

6 голосов
/ 21 марта 2019

Заголовок <bits/unique_ptr.h> является внутренней деталью реализации стандартной библиотеки GCC. Это один из заголовков, который составляет реализацию <memory>.

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

Код пользователя не должен никогда пытаться включить <bits/unique_ptr.h> напрямую, потому что он даже не существует в других реализациях стандартной библиотеки C ++. Правильный заголовок для включения: <memory>. Код необходимо исправить, чтобы перестать пытаться включать внутренние подробности реализации конкретной реализации.

Есть даже комментарий, говорящий об этом в <bits/unique_ptr.h>:

/** @file bits/unique_ptr.h
 *  This is an internal header file, included by other library headers.
 *  Do not attempt to use it directly. @headername{memory}
 */
3 голосов
/ 21 марта 2019

Правильный заголовочный файл для std::unique_ptr:

#include <memory>
...