【问题标题】:Boost Vector size constructor not working提升向量大小构造函数不起作用
【发布时间】:2014-01-29 05:29:51
【问题描述】:

当我编译以下代码时:

#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/io.hpp>
namespace ublas = boost::numeric::ublas;
class Point {
    ublas::vector<double> 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);

如果我改为使用像这样的空构造函数运行它

    ublas::vector<double> 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;
}

我想它在我的 make 文件中的某个地方,但我不确定是什么。

我的整个 Makefile 如下所示:

CXX=g++
CXXFLAGS=-std=c++11 -w -I/usr/local/Cellar/boost/1.55.0/include -L/usr/local/Cellar/boost/1.55.0/ -l -lboost_system
BIN=orange

SRC=$(wildcard *.cc)
OBJ=$(SRC:%.cc=%.o)

all: $(OBJ)
    $(CXX) -o $(BIN) $^

%.o: %.c
    $(CXX) $@ -c $< 

clean:
    rm -f *.o
    rm -f $(BIN)

任何帮助将不胜感激。
在此先感谢,
最大

【问题讨论】:

    标签: c++ boost constructor boost-ublas


    【解决方案1】:

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

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

    请注意,这也是一个有效的初始化:

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

    但是,如果这个向量有一个构造函数,它接受一个initialization_list(就像std::vector 那样),它将初始化v 以拥有一个值为3.0 的元素。

    或者,您可以使用 C++03 样式并在构造函数初始化列表中进行初始化。但请注意,在这种情况下,您的课程不再是聚合。这可能是也可能不是问题。示例:

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

    另外,请注意尾随 ;

    【讨论】:

    • 元素值将是 3.0 而不是 1.0
    【解决方案2】:

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

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

    还要注意,当你这样做时

    ublas::vector<double> v();
    

    您正在声明一个函数v,它不接受任何参数并返回一个向量。

    【讨论】:

    猜你喜欢
    • 2015-02-18
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多