Инициализация вектора Убласа вне функции

Я хотел бы объявить конкретный вектор 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;
}

person user2306172    schedule 22.04.2013    source источник


Ответы (2)


Конечно, это приводит к ошибке, так как

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

но вы не можете вызывать функции вне функций.

person ForEveR    schedule 22.04.2013

В С++ 11 это можно решить с помощью лямбды:

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