c++ - Boost Vector 大小构造函数不起作用

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

我在下面收到此错误,提示构造函数中存在值 3。 boost 示例代码本身显示了使用构造函数初始化的 vector 的大小。

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)

如有任何帮助,我们将不胜感激。
提前致谢,
最大

最佳答案

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

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

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

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

但是如果这个 vector 有一个构造函数接受一个 initialization_list(就像 std::vector 那样),它会初始化 v 有一个元素值 3.0

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

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

另外,请注意尾随的 ;

关于c++ - Boost Vector 大小构造函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21040977/

相关文章:

c++ - 找出平均比较次数

c++ - 将 boost::asio 中的异步文件 io 扩展到 Mac OS X

c++ - 无法在 MacOS Mojave 上链接 C++11 的库

c++ - 调用复制 ctor 而不是移动 ctor

c++ - 大面积钻石方形地形生成

c++ - 在 C++ 中引用而不通过引用传递

c++ - Boost::Asio io_context::run 未知的 Visual C++ 运行时错误:调试错误

java - 如何使用 Guice 模块实例化类中的多个字段之一?

javascript - 为什么 JavaScript ES6 不支持多构造类?

c++ - PKCS7_sign 返回 null