使用 auto 时出错:没有命名类型,numpy 的 arange 的 c++ 版本
error using auto: does not name a type, c++ version of numpy's arange
寻找用 c++ 实现 numpy
的 arange
函数的代码,我找到了 this answer.
我将以下代码放在文件中 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++ 用户来说很明显的错误。但是,Google找了一段时间,我一直没有想出是什么。
正如@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
$
寻找用 c++ 实现 numpy
的 arange
函数的代码,我找到了 this answer.
我将以下代码放在文件中 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++ 用户来说很明显的错误。但是,Google找了一段时间,我一直没有想出是什么。
正如@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
$