2013-04-22 78 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; 
}();