2017-10-10 40 views
0

首先,我使用boost庫,如果它改變了任何內容,代碼將在Windows機器上編譯。 代碼本身包含更多的函數作用於矩陣,但只有這一個觸發錯誤。 嗯,我想喜歡變換矩陣: {001 010} 喜歡的東西: {1 2} 但奇怪的是,我不能編譯我的代碼,我找不到錯誤所以如果有人能幫助我,我會很高興。 代碼如下:C++將輸入轉換爲類時的Boost矩陣錯誤

using namespace boost::numeric::ublas; 

typedef matrix <float, row_major, unbounded_array<float>> MATRIXf; 
MATRIXf matrix_to_class (const MATRIXf inputM) 
{ 
    MATRIXf output; 
    for (std::size_t line = 0; line < inputM.size1(); line++) 
    {               
     for (std::size_t column = 0; column < inputM.size2(); column++) 
     {              
      if (column == 1)            
      {             
       output.insert_element(line,0.0,column); 
      }             
     }              
    } 

    return output; 
}  

以下是錯誤代碼:

1>c:\program files (x86)\microsoft visual studio 14.0\vc\include\xutility(2372): error C4996: 'std::copy::_Unchecked_iterators::_Deprecate': Call to 'std::copy' with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' 
1> c:\program files (x86)\microsoft visual studio 14.0\vc\include\xutility(2372): note: see declaration of 'std::copy::_Unchecked_iterators::_Deprecate' 
1> e:\c++ libraries\general\boost_1_65_0\boost\numeric\ublas\storage.hpp(204): note: see reference to function template instantiation '_OutIt *std::copy<float*,float*>(_InIt,_InIt,_OutIt)' being compiled 
1>   with 
1>   [ 
1>    _OutIt=float *, 
1>    _InIt=float * 
1>   ] 
1> e:\c++ libraries\general\boost_1_65_0\boost\numeric\ublas\storage.hpp(201): note: while compiling class template member function 'boost::numeric::ublas::unbounded_array<float,std::allocator<T>> &boost::numeric::ublas::unbounded_array<T,std::allocator<T>>::operator =(const boost::numeric::ublas::unbounded_array<T,std::allocator<T>> &)' 
1>   with 
1>   [ 
1>    T=float 
1>   ] 
1> e:\c++ libraries\general\boost_1_65_0\boost\numeric\ublas\matrix.hpp(310): note: see reference to function template instantiation 'boost::numeric::ublas::unbounded_array<float,std::allocator<T>> &boost::numeric::ublas::unbounded_array<T,std::allocator<T>>::operator =(const boost::numeric::ublas::unbounded_array<T,std::allocator<T>> &)' being compiled 
1>   with 
1>   [ 
1>    T=float 
1>   ] 
1> e:\c++ libraries\general\boost_1_65_0\boost\numeric\ublas\matrix.hpp(102): note: see reference to class template instantiation 'boost::numeric::ublas::unbounded_array<float,std::allocator<T>>' being compiled 
1>   with 
1>   [ 
1>    T=float 
1>   ] 
1> g:\c++ python\travail\visualstudio\visualstudio\guigui\neural net\neural net\utils.hpp(21): note: see reference to class template instantiation 'boost::numeric::ublas::matrix<float,boost::numeric::ublas::row_major,boost::numeric::ublas::unbounded_array<float,std::allocator<T>>>' being compiled 
1>   with 
1>   [ 
1>    T=float 
1>   ] 
1>c:\program files (x86)\microsoft visual studio 14.0\vc\include\xmemory(102): error C4996: 'std::uninitialized_copy::_Unchecked_iterators::_Deprecate': Call to 'std::uninitialized_copy' with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' 
1> c:\program files (x86)\microsoft visual studio 14.0\vc\include\xmemory(102): note: see declaration of 'std::uninitialized_copy::_Unchecked_iterators::_Deprecate' 
1> e:\c++ libraries\general\boost_1_65_0\boost\numeric\ublas\storage.hpp(94): note: see reference to function template instantiation '_FwdIt *std::uninitialized_copy<const float*,float*>(_InIt,_InIt,_FwdIt)' being compiled 
1>   with 
1>   [ 
1>    _FwdIt=float *, 
1>    _InIt=const float * 
1>   ] 
1> e:\c++ libraries\general\boost_1_65_0\boost\numeric\ublas\storage.hpp(89): note: while compiling class template member function 'boost::numeric::ublas::unbounded_array<float,std::allocator<T>>::unbounded_array(const boost::numeric::ublas::unbounded_array<T,std::allocator<T>> &)' 
1>   with 
1>   [ 
1>    T=float 
1>   ] 
1> e:\c++ libraries\general\boost_1_65_0\boost\numeric\ublas\matrix.hpp(162): note: see reference to function template instantiation 'boost::numeric::ublas::unbounded_array<float,std::allocator<T>>::unbounded_array(const boost::numeric::ublas::unbounded_array<T,std::allocator<T>> &)' being compiled 
1>   with 
1>   [ 
1>    T=float 
1>   ] 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

試圖定位錯誤使我上面的功能。 在此先感謝。

回答

1

在第一條錯誤消息的末尾附近是文本「要禁用此警告,請使用-D_SCL_SECURE_NO_WARNINGS」。 https://msdn.microsoft.com/en-us/library/ttcz0bys.aspx對警告和檢查迭代器有更詳細的討論。實質上,Microsoft創建了標準C++函數的「安全」突變,以幫助開發人員避免無效的迭代器使用。該錯誤消息建議您定義_SCL_SECURE_NO_WARNINGS。這可以在項目屬性C/C++/Preprocessor/Preprocessor Definitions中完成。在過去的一個項目中,由於性能受到影響,我們禁用了所有「安全」版本的功能。

您可能有興趣閱讀上面的Microsoft網頁,以獲取有關選中的迭代器主題的更多信息。