2015-10-13 35 views
1

尋找代碼來實現numpyarange函數在c + +中,我發現this answer錯誤使用自動:不會命名一個類型,C++版本的numpy的arange

我把下面的代碼在一個文件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++用戶來說是顯而易見的。但是,在谷歌搜索了一段時間後,我還沒有想出它是什麼。

+1

看起來你沒有啓用C++ 11的支持,或你的編譯器沒有它。 – Brian

+0

@Brian是否有一個簡單的方法來檢查這個?會報告我的編譯器版本告訴你是否是這種情況? – dbliss

+0

您可以使用'__cplusplus'宏來檢查給定編譯是否啓用C++ 11。 http://stackoverflow.com/questions/5047971/how-do-i-check-for-c11-support – Brian

回答

1

由於@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 
$