Cygwin的Armadillo的C++ 11功能被禁用。但它適用於Linux。arma ::錯誤的std ::向量
我想我的代碼是跨平臺的。
起初:
// constructor
MyClass(arma::vec x)
{
init(x);
}
當我通過一個數組,因爲犰狳的C++ 11點的選擇是不是在Cygwin啓用它沒有工作:
MyClass a({1.0,2.0,3.0});
這將導致在Cygwin中出現錯誤,而在Linux中工作。
要解決這個問題,我加入另一個構造函數修改了代碼:現在
// constructor
MyClass(arma::vec x)
{
init(x);
}
// constructor
MyClass(std::vector<double> x)
{
arma::vec x2;
for(auto d:x)
x2<d;
init(x2);
}
,此代碼的工作在Cygwin正常,但在Linux中它會導致錯誤。
MyClass a({1.0,2.0,3.0});
error: call of overloaded ... is ambiguous
如何解決這個歧義?
'init(x)'請停止使用2階段初始化。這就是C++ 11委託構造函數的用途。另外,修復Cygwin上的Armadillo問題不是更容易嗎? –
@NicolBolas,犰狳是我手中的一個圖書館。 C++ 11不是Armadillo的問題,但它是Cygwin實現它不完整的問題。順便說一句,在這種情況下如何避免'init'?在創建'x2'之前,我無法調用另一個構造函數。 – ar2015
我不知道Armadillo的'vec'類的細節,但像這樣:'MyClass(const std :: vector&x):MyClass(arma :: vec(x.begin(),x.end() ))'。或者他們的矢量類提供的任何其他接口。另外,我建議使用const的'std :: vector'參數而不是value,因爲你不會從它移動。 –