2013-04-22 48 views
0

我想宣布一个特定的增强ublas向量作为全局变量。问题在于函数外部的声明总是导致错误。功能之外的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; 
} 

回答

1

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

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

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

0

在C++ 11这可以用一个lambda解决:

const auto test = [](){ 
    ublas::vector<int> m(3); 
    m <<= 1, 2, 3; 
    return m; 
}();