使用自动时出错:未命名 Numpy 的 Arange 的类型、C++ 版本

error using auto: does not name a type, c++ version of numpy's arange

本文关键字:Arange 类型 版本 C++ Numpy 未命名 出错      更新时间:2023-10-16

寻找在c++中实现numpyarange函数的代码,我找到了这个答案。

我把下面的代码放在一个文件test_arange_c.cpp:

#include <vector>
template<typename T>
std::vector<T> arange(T start, T stop, T step = 1)
{
  std::vector<T> values;
  for (T value = start; value < stop; value += step)
    values.push_back(value);
  return values;
}
int main()
{
  double dt;
  dt = 0.5;
  auto t_array = arange<double>(0, 40, dt);
  return 0;
}
当我尝试编译它时,我得到以下错误:
$ c++ test_arange_c.cpp -o test_arange_c.out
test_arange_c.cpp: In function ‘int main()’:
test_arange_c.cpp:14:8: error: ‘t_array’ does not name a type
   auto t_array = arange<double>(0, 40, dt);
毫无疑问,我犯了一个对于经验丰富的c++用户来说很明显的错误。但是,在谷歌上搜索了一段时间后,我还没有想出它是什么。

正如@Brian建议的,我没有启用C++11支持。

$ c++ --version
c++ (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

这失败:

$ c++ test_arange_c.cpp -o test_arange_c.out
test_arange_c.cpp: In function ‘int main()’:
test_arange_c.cpp:16:8: error: ‘t_array’ does not name a type
   auto t_array = arange<double>(0, 40, dt);
        ^

如此:

$ c++ -std=c++11 test_arange_c.cpp -o test_arange_c.out
$