C++ Boost向量大小构造函数不工作

C++ Boost向量大小构造函数不工作,c++,boost,constructor,boost-ublas,C++,Boost,Constructor,Boost Ublas,当我编译以下代码时: #include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/io.hpp> namespace ublas = boost::numeric::ublas; class Point { ublas::vector<double> v(3); } #包括 #包括 名称空间ublas=boost::numeric::ublas; 类点{ ublas:

当我编译以下代码时:

#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/io.hpp>
namespace ublas = boost::numeric::ublas;
class Point {
    ublas::vector<double> v(3);
}
#包括
#包括
名称空间ublas=boost::numeric::ublas;
类点{
ublas::向量v(3);
}
我在下面得到这个错误,抱怨构造函数中的值是3。boost示例代码本身显示了使用构造函数初始化的向量的大小

g++ -std=c++11 -w -I/usr/local/Cellar/boost/1.55.0/include -L/usr/local/Cellar/boost/1.55.0/ -l -lboost_system   -c -o point.o point.cc
point.cc:38:29: error: expected parameter declarator
ublas::vector<double> v(3);
                        ^
point.cc:38:29: error: expected ')'
point.cc:38:28: note: to match this '('
ublas::vector<double> v(3);
g++-std=c++11-w-I/usr/local/cillar/boost/1.55.0/include-L/usr/local/cillar/boost/1.55.0/-L-lboost\u系统-c-o点.o点.cc
point.cc:38:29:错误:应为参数声明符
ublas::向量v(3);
^
point.cc:38:29:错误:预期为''
点.cc:38:28:注:匹配此'('
ublas::向量v(3);
如果我用一个空构造函数运行它,就像这样

    ublas::vector<double> v();
ublas::vector v();
然后它就可以正常运行了。在某个地方我犯了一个错误,因为BOOST示例代码如下所示

#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/io.hpp>

int main () {
    using namespace boost::numeric::ublas;
    vector<double> v (3);
    for (unsigned i = 0; i < v.size (); ++ i)
        v (i) = i;
    std::cout << v << std::endl;
}
#包括
#包括
int main(){
使用名称空间boost::numeric::ublas;
向量v(3);
for(无符号i=0;i这是因为您在类中声明了一个成员变量。这意味着您必须在构造函数初始值设定项列表中初始化该变量:

class Point {
    ublas::vector<double> v;

    Point() : v(3) {}
};
类点{
ublas::向量v;
点():v(3){}
};
还要注意的是,当你

ublas::vector<double> v();
ublas::vector v();

您正在声明一个不带参数并返回向量的函数。

这是因为您在类中声明了一个成员变量。这意味着您必须在构造函数初始值设定项列表中初始化该变量:

class Point {
    ublas::vector<double> v;

    Point() : v(3) {}
};
类点{
ublas::向量v;
点():v(3){}
};
还要注意的是,当你

ublas::vector<double> v();
ublas::vector v();

您正在声明一个不带参数且返回向量的函数。

声明点的非静态数据成员初始化不支持
()
语法,因为在这种形式下,它可能与函数声明混淆。因此您需要

class Point {
    ublas::vector<double> v = ublas::vector<double>(3);
};

另外,请注意,声明点处的尾随

非静态数据成员初始化不支持
()
语法,因为在这种形式中,它可能与函数声明混淆。因此,您需要

class Point {
    ublas::vector<double> v = ublas::vector<double>(3);
};

另外,请注意尾随的

至少提及至少提及元素值将为
3.0
not
1.0
元素值将为
3.0
not
1.0