C++ arma::vector与std::vector错误

C++ arma::vector与std::vector错误,c++,c++11,initializer-list,armadillo,overloading,C++,C++11,Initializer List,Armadillo,Overloading,的C++11功能在Cygwin上被禁用。但它在Linux上工作 我希望我的代码是跨平台的 首先: // constructor MyClass(arma::vec x) { init(x); } 当我向它传递数组时,它不起作用,因为Cygwin上没有启用Armadillo的C++11选项: MyClass a({1.0,2.0,3.0}); 它将导致Cygwin在Linux中工作时出错 为了解决这个问题,我通过添加另一个构造函数修改了代码: // constructor MyClas

的C++11功能在Cygwin上被禁用。但它在Linux上工作

我希望我的代码是跨平台的

首先:

// constructor
MyClass(arma::vec x)
{
    init(x);
}
当我向它传递数组时,它不起作用,因为Cygwin上没有启用Armadillo的C++11选项:

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);
}

如何修复这种歧义?

创建接受
std::initializer\u列表的ctor

创建接受
std::initializer\u列表的ctor
init(x)
请停止使用两阶段初始化。这就是C++11委托构造函数的用途。另外,在Cygwin上解决犰狳问题不是更容易吗?@Nicolas,犰狳是我手中的一个图书馆。C++11不是犰狳的问题,而是Cygwin实现它的问题。顺便问一下,在这种情况下如何避免
init
?我不能在创建
x2
之前调用另一个构造函数。我不知道犰狳的
vec
类的详细信息,但类似这样:
MyClass(const std::vector&x):MyClass(arma::vec(x.begin(),x.end())
。或者向量类提供的任何其他接口。另外,我建议通过
const&
std::vector
参数,而不是值,因为您不会离开它。@NicolBolas,这里使用begin和end不起作用
没有匹配函数来调用'arma::Col::Col(std::vector::iterator,std::vector::iterator)':MyClass(arma::vec(x.begin(),x.end())
。谢谢你的
const&
,我将在我的代码中应用它。我没想到它会起作用。就像我说的:“或者他们的向量类提供的任何其他接口。”这意味着“去看看他们的文档,找到一个合适的构造函数来复制数据数组。”
init(x)
请停止使用两阶段初始化。这就是C++11委托构造函数的用途。另外,在Cygwin上解决犰狳问题不是更容易吗?@Nicolas,犰狳是我手中的一个图书馆。C++11不是犰狳的问题,而是Cygwin实现它的问题。顺便问一下,在这种情况下如何避免
init
?我不能在创建
x2
之前调用另一个构造函数。我不知道犰狳的
vec
类的详细信息,但类似这样:
MyClass(const std::vector&x):MyClass(arma::vec(x.begin(),x.end())
。或者向量类提供的任何其他接口。另外,我建议通过
const&
std::vector
参数,而不是值,因为您不会离开它。@NicolBolas,这里使用begin和end不起作用
没有匹配函数来调用'arma::Col::Col(std::vector::iterator,std::vector::iterator)':MyClass(arma::vec(x.begin(),x.end())
。谢谢你的
const&
,我将在我的代码中应用它。我没想到它会起作用。就像我说的:“或者他们的vector类提供的任何其他接口。”这意味着“去看看他们的文档,找到一个合适的构造函数来复制数据数组”。工作起来很有魅力。但是它与
std::vector
有何不同?当您传递带括号的初始化器时,强烈建议使用带有初始化器列表的构造函数,如charm。但是它与
std::vector
有何不同?当您传递带括号的初始值设定项时,强烈建议使用带有初始值设定项\u列表的构造函数
MyClass a({1.0,2.0,3.0});

error: call of overloaded ...  is ambiguous