能不能这样来声明变量?
std::vector<std::vector<f32>> _Data;存数据是这样的:
neatenData 是一个返回vector<f32>这个类型的一个函数。
std::vector<std::vector<f32>> _PortData; _PortData.push_back(nc->neatenData(output));
那么
取数据时候这样写错误的,那应该怎么样写呢? if (_Data.size())
{
std::vector<f32> _comData = _Data.at(_Data.begin());
_Data.erase(_Data.begin());
update(&_comData);
}
std::vector<std::vector<f32>> _Data;存数据是这样的:
neatenData 是一个返回vector<f32>这个类型的一个函数。
std::vector<std::vector<f32>> _PortData; _PortData.push_back(nc->neatenData(output));
那么
取数据时候这样写错误的,那应该怎么样写呢? if (_Data.size())
{
std::vector<f32> _comData = _Data.at(_Data.begin());
_Data.erase(_Data.begin());
update(&_comData);
}
解决方案 »
- 求VC++开发自定义控件,读写XML、操作DataSet、连接数据库实例资源
- 550 用户被锁定
- 向一张没有记录的表中加入第一条记录出错(ODBC+ACCESS+ 时间日期型)
- CString.Format(....)里那些格式标准有没有文章介绍啊?
- 如何用WIN32 API,画矢量图形
- 请问用OpenGL怎样把用其它3D作图软件所做的3D图形读取并显示在窗口上?
- 改变图片大小(用scroll bar)
- 我从一个客户端得到文件,如何发到别的N个客户端,要求效率与速度,非阻塞,用TransmitFile行不行,要注意什么,我现在使用的API加多线程
- 关于SOCKET的问题。
- 打包!打包!如何打!
- 打开工程提示工程文件名不对
- 菜鸟告急:怎样将位图像素数据读入数组??(vc++)
1> with
1> [
1> _Ty=irr::f32
1> ]
1> and
1> [
1> _Ty=std::vector<irr::f32>,
1> _Alloc=std::allocator<std::vector<irr::f32>>
1> ]
1> 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
{
std::vector<f32> _comData = _Data.begin();
_Data.erase(_Data.begin());
update(&_comData);
}
不行哦,还是错误的哦
error C2440: “初始化”: 无法从“std::_Vector_iterator<_Ty,_Alloc>”转换为“std::vector<_Ty>”
1> with
1> [
1> _Ty=std::vector<irr::f32>,
1> _Alloc=std::allocator<std::vector<irr::f32>>
1> ]
1> and
1> [
1> _Ty=irr::f32
1> ]
1> 无构造函数可以接受源类型,或构造函数重载决策不明确
{
std::vector <f32> _comData;
_comData.assign(_Data.begin().benin(),_Data.begin().end());
_Data.erase(_Data.begin());
update(&_comData);
}
1> with
1> [
1> _Ty=std::vector<irr::f32>,
1> _Alloc=std::allocator<std::vector<irr::f32>>
1> ]
{
std::vector <f32> _comData;
_comData.assign(_Data.begin()->begin(),_Data.begin()->end());
_Data.erase(_Data.begin());
update(&_comData);
}
_Data[0]; or
*_Data.begin();
static void _Xlen()
{ // report a length_error
_THROW(length_error, "vector<T> too long");
}
vector< vector<int> > vecInt;
否则会认为是左移操作。at或begin返回的都是迭代器
所以必须声明
vector<vector<int>>::iterator it = vecInt.at(vecInt.begin());
另外windows环境下的eraser,比如:
for (it = begin(); it != someVector.end();)
{
if (*it == value)
{
it = someVector.erase(it); // 或者someVector.erase(it++);
}
else
{
++it;
}
}
std::vector<std::vector<f32>*>
另外最好用typedef定义一下类型,看起来也清楚一些。
是一个读取串口数据然后整理好发送到opengl的窗口,让opengl按照整理的数据控制节点模型
在多线程里面运行的typedef float f32;UINT NodeControl::CommWatchProc(LPVOID pParam)
{
int len;
DWORD dRes;
int okData = 0;//正确
int ErrData = 0;//错误 //串口数据缓冲区
std::vector<int> rBuf; NodeControl* nc = (NodeControl*)pParam;
const video::SExposedVideoData& videoData = nc->device->getVideoDriver()->getExposedVideoData();
HWND h = reinterpret_cast<HWND>(videoData.OpenGLWin32.HWnd); int port = nc->Info->Port;//串口端口
ILogger* logs = nc->device->getLogger();//系统日志
std::vector<std::vector<f32>> _PortData; rBuf.reserve(8192);
while(1)
{
dRes = WaitForSingleObject(nc->hExit, 10);
switch(dRes)
{
/*got hExit event,exit thread.*/
case WAIT_OBJECT_0:
return 0;
default:
break;
} char buf[512];
len = sio_read(port, buf, 512);//串口数据读取
if(len > 0)
{
std::vector<int> output;
//数据保存到缓冲区
for (int i = 0; i < len; i++)
rBuf.push_back(buf[i]&0xFF); //寻找开始标示
std::vector<int>::iterator c5pos = find(rBuf.begin(), rBuf.end(), 0xC5); //找不到开始标示
if (c5pos == rBuf.end())
continue; //复制到输出缓冲区、清除串口数据缓冲区
output.assign(rBuf.begin(), c5pos);
rBuf.erase(rBuf.begin(), c5pos + 1); //数据长度
if (output.size() != 40)
{
logs->log("Data Length Error!");
ErrData++;
continue;
} //数据校验
int crcCheck = 0xC5;
for (uinteger i = 0; i < output.size() - 3; i++)
crcCheck += output.at(i);
if ((crcCheck&0xFF) != output.at(38))
{
logs->log("Data Checkout Error!");
ErrData++;
continue;
} _PortData.push_back(nc->neatenData(output)); PostMessage(h, WM_USER, WPARAM(&_PortData), LPARAM(ErrData + okData));
}
}
return 0;
}std::vector<f32> NodeControl::neatenData(std::vector<int> sData)
{
std::vector<f32> result;
result.reserve(20); //取得分组数据并合并高低位
result.push_back((f32)sData.at(0) * 256 + (f32)sData.at(1) );
result.push_back((f32)sData.at(2) * 256 + (f32)sData.at(3) );
result.push_back((f32)sData.at(4) * 256 + (f32)sData.at(5) );
result.push_back((f32)sData.at(6) * 256 + (f32)sData.at(7) );
result.push_back((f32)sData.at(8) * 256 + (f32)sData.at(9) );
result.push_back((f32)sData.at(10) * 256 + (f32)sData.at(11));
result.push_back((f32)sData.at(12) * 256 + (f32)sData.at(13));
result.push_back((f32)sData.at(14) * 256 + (f32)sData.at(15));
result.push_back((f32)sData.at(16) * 256 + (f32)sData.at(17));
result.push_back((f32)sData.at(18) * 256 + (f32)sData.at(19));
result.push_back((f32)sData.at(20) * 256 + (f32)sData.at(21));
result.push_back((f32)sData.at(22) * 256 + (f32)sData.at(23));
result.push_back((f32)sData.at(24) * 256 + (f32)sData.at(25));
result.push_back((f32)sData.at(26) * 256 + (f32)sData.at(27));
result.push_back((f32)sData.at(28) * 256 + (f32)sData.at(29));
result.push_back((f32)sData.at(30) * 256 + (f32)sData.at(31));
result.push_back((f32)sData.at(32) * 256 + (f32)sData.at(33));
result.push_back((f32)sData.at(34) * 256 + (f32)sData.at(35)); //信号量
HSignal = sData[36] * 256 + sData[37]; return result;
}
int len = event.UserEvent.UserData2;//接收到数据记录总数 if (_Data->size())
{
std::vector<f32> _comData;
_comData.assign(_Data->begin()->begin(), _Data->begin()->end());//获取最早一组数据
_Data->erase(_Data->begin());//清除最早一组数据。
//这里是否需要重新整理_Data?
update(&_comData);//更新节点状态
}
请各位大牛看看,那些地方不合理的。指导指导我
这里好像就是指针了的都需要_Data->begin()->begin()来操作了