Функция C ++ 11 iota () не поддерживается nvcc? - PullRequest
0 голосов
/ 02 июля 2018

Я пытался скомпилировать этот код: -

#include <vector>

using namespace std;

int main() {
    vector<int> v(5);
    iota(v.begin(), v.end(), 0);
}

И я скомпилировал его с помощью этой команды: -

D:\workspace\test>nvcc main.cpp --std=c++11

(потому что без указания std я получаю ошибку "identifier iota () not found")

И я получаю эту ошибку: -

nvcc warning : The -std=c++11 flag is not supported with the configured host compiler. Flag will be ignored.
main.cpp
main.cpp(7): error C3861: 'iota': identifier not found

Как указать стандарт C ++, который я хочу использовать nvcc?

Кроме того, компиляция кода хоста отдельно с помощью g ++ и кода устройства с помощью nvcc, а затем связывание объектов с помощью nvcc не работает. Я получаю это .

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Нет необходимости. По умолчанию инструмент командной строки nvcc использует Microsoft cl.exe. И если ваш cl.exe обновлен, опция std недоступна . cl.exe автоматически поддерживает все новейшие функции стандарта C ++.

Однако в cl.exe некоторые функции, такие как iota (), не определены в пространстве имен std. Вместо этого iota () определяется в заголовочном файле numeric.h. Таким образом, чтобы запустить этот код, вам нужно включить указанный заголовочный файл. Окончательный код должен выглядеть следующим образом: -

#include <vector>
#include <numeric.h>

using namespace std;

int main() {
    vector<int> v(5);
    iota(v.begin(), v.end(), 0);
}

Код может быть скомпилирован командой: -

nvcc main.cpp
0 голосов
/ 02 июля 2018

Я думаю, вам нужно добавить #include <numeric>. введите описание изображения здесь

...