我想声明一个特定的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;
}发布于 2013-04-22 14:37:03
当然这会导致错误,因为它是
test.operator <<= (1,2,3);但是你不能在函数之外调用函数。
发布于 2016-09-18 02:47:42
在C++11中,这可以用lambda来解决:
const auto test = [](){
    ublas::vector<int> m(3);
    m <<= 1, 2, 3;
    return m;
}();https://stackoverflow.com/questions/16140775
复制相似问题