0

我想将一个特定的 boost ublas 向量声明为全局变量。问题是在函数外部声明总是会导致错误。

这是一个具体的例子:

以下代码将给出多个错误:( error C2143: syntax error : missing ';' before '<<=' error C4430: missing type specifier - int assumed. error C2371: 'test' : redefinition; different basic types)

#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
#include <boost/numeric/ublas/assignment.hpp> 
using namespace boost::numeric::ublas;

vector<int> test(3);
test <<= 1,2,3;

void main () {
std::cout << test << std::endl;
}

将声明移动到主程序但是有效

#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
#include <boost/numeric/ublas/assignment.hpp> 
using namespace boost::numeric::ublas;

vector<int> test(3);

void main () {
test <<= 1,2,3;
std::cout << test << std::endl;
}
4

2 回答 2

1

当然它会导致错误,因为它是

test.operator <<= (1,2,3);

但是你不能在函数之外调用函数。

于 2013-04-22T06:37:02.680 回答
0

在 C++11 中,这可以用 lambda 来解决:

const auto test = [](){
    ublas::vector<int> m(3);
    m <<= 1, 2, 3;
    return m;
}();
于 2016-09-17T18:47:41.857 回答