C++ 英特尔TBB,使用并行函数执行成员函数

C++ 英特尔TBB,使用并行函数执行成员函数,c++,methods,parallel-processing,tbb,C++,Methods,Parallel Processing,Tbb,我有一个类似的课程: struct orden { long long time; double price; const char* time1; orden(const char* t, double p) : time1(t),price(p){}; void convertToMs() { time = dateToMs2(time1); } }; 我正在做的是以串行方式读取文件,执行结构的构造函数,并将生成的对象保存在orden向量中: vector<orden&g

我有一个类似的课程:

struct orden
{
 long long time;
 double price;
 const char* time1;
 orden(const char* t, double p) : time1(t),price(p){};
void convertToMs()
{
  time = dateToMs2(time1);
}
};
我正在做的是以串行方式读取文件,执行结构的构造函数,并将生成的对象保存在orden向量中:

vector<orden> ord;
ifstream fe(filename)
while(getline(fe,order_line))
{
  price = stod(order_line.substr(position+2));
  time = order_line.substr(0,26).c_str();
  ord.push_back(time, price);
}
我有以下错误:

In file included from pract1.cpp:5:0:
orden.h: In member function ‘void orden::convertToMs() const’:
orden.h:29:27: error: assignment of member ‘orden::time’ in read-only object
 time = dateToMs2(time1);
如果我删除常量,我有以下一个:

pract1.cpp: In lambda function:
pract1.cpp:158:43: error: passing ‘const value_type {aka const orden}’ as ‘this’ argument discards qualifiers [-fpermissive]
     ordersOfTheCompany[j].convertToMs();
                                       ^
In file included from pract1.cpp:5:0:
orden.h:27:8: note:   in call to ‘void orden::convertToMs()’
void convertToMs()
编辑2:

再次抱歉,我有以下代码:

vector<orden> ord;
while(getline(fe,order_line))
{
  price = stod(order_line.substr(position+2));
  time = order_line.substr(0,26).c_str();
  ord.push_back(time, price);
}
tbb::parallel_for(tbb::blocked_range<size_t>(0,ord.size()),
[=](tbb::blocked_range<size_t>& r) {

  for(std::size_t j=r.begin(); j!=r.end(); ++j)
  {
    ord[j].convertToMs();
  }});
向量ord;
while(getline(fe,订单行))
{
价格=stod(订单行子订单(位置+2));
time=order_line.substr(0,26).c_str();
订单后推(时间、价格);
}
tbb::parallel_for(tbb::blocked_范围(0,ord.size()),
[=](待定::阻塞的范围和r){
对于(std::size_t j=r.begin();j!=r.end();++j)
{
ord[j].convertToMs();
}});
我试图以并行方式为

执行成员函数的for
parallel\u有一个类似于您尝试执行的示例。它将结果保存到与输入数组不同的数组中

在您的情况下,您需要添加以下内容

std::vector<long long> outTime;
outTime.resize(ord.size());
convertToMs
更改为
const
函数后,该函数返回转换后的值,而不是将其保存在本地。
parallel\u for
返回后,将
outTime
中的结果复制回
ord


您可以有两个版本的
convertToMs
,一个是内部保存结果的非常量版本,另一个是返回转换时间的
const

您从编译器得到了什么错误消息?这也缺乏一个合理的解释。特别是,它缺少对所使用的几个变量的声明。@1201ProgramAlarm抱歉,我已经用您对parallel_有问题的错误编辑了这个问题,但是显示的代码中没有。
std::vector<long long> outTime;
outTime.resize(ord.size());
outTime[j] = ord[j].convertToMs();