struct里面放vector成员,大家看看这么用有问题没?

zhuyf87 2013-03-19 12:37:48

// 无码出库记录
typedef struct
{
TCHAR billNumber[50];
TCHAR materielNumber[50];
TCHAR scannedTime[50];
TCHAR location[50];
TCHAR staffName[20];
int staffId;
int isUpload;
int scannedCount;
}CheckOutNoneCode;

struct CheckOutRecord
{
TCHAR materielNumber[50]; // 物料编码
int plannedCount; // 计划出库数量
std::vector<CheckOutNoneCode> checkOut; // 属于本物料编码的出库记录
};

std::vector<CheckOutRecord> recordGroup; // 很多个物料编码的出库记录集合


大家帮我看看,我如此定义出的recordGroup,用起来有问题没?
struct里面放vector,我这是第一次,大家帮忙说说这样用有没有问题,有什么风险和注意点。
谢谢大家哈。说的认真的会多给分。^_^
...全文
2044 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuyf87 2013-03-20
  • 打赏
  • 举报
回复 1
引用 11 楼 a36254094 的回复:
引用 2 楼 shn521 的回复:没想到有什么问题 ++ C/C++ code?12345678910111213141516171819struct CheckOutRecord{ TCHAR materielNumber[50]; // 物料编码 int plannedCount; // 计划出库数量 std::vector<int> ……
我不会这么用的,sizeof能计算准确CheckOutRecord所需的内存大小吗? 里面vector它没办法计算吧。 CheckOutRecord的对象我没有去动态创建,即使动态创建也要用new吧。 new操作符,会先分配内存,然后调用构造函数。malloc只是分配内存, ch->checkOut.push_back(3);,那checkOut肯定没构造好。
shn521 2013-03-19
  • 打赏
  • 举报
回复
没想到有什么问题
sduxiaoxiang 2013-03-19
  • 打赏
  • 举报
回复
该咋用咋用呗
佑勿勿 2013-03-19
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
vector是对象,不是一段内存,放在struct里面不妥。
++++ 上面认同错了
佑勿勿 2013-03-19
  • 打赏
  • 举报
回复
引用 2 楼 shn521 的回复:
没想到有什么问题
++
struct CheckOutRecord
{
	TCHAR materielNumber[50]; // 物料编码
	int plannedCount; // 计划出库数量
	std::vector<int> checkOut; // 属于本物料编码的出库记录
};
int _tmain(int argc, _TCHAR* argv[])
{

	CheckOutRecord *ch;
	ch = (CheckOutRecord *)malloc(sizeof(CheckOutRecord));
	ch->checkOut.push_back(3);
	//cout << ch->checkOut[1] << endl;
// 	vector<int> ch2;
// 	ch2.push_back(3);
//	cout << ch2[0]<< endl;
	return 0;

}
你运行一下。。。会出错的 http://zhidao.baidu.com/question/483251763.html?from=pubpage&msgtype=2 可以看看这个
tonforce 2013-03-19
  • 打赏
  • 举报
回复
没问题的,把它当做一个特殊的类型就行了 可以正常使用,还可以作为参数传递
zhuyf87 2013-03-19
  • 打赏
  • 举报
回复
引用 6 楼 openXMPP 的回复:
一点问题都没有 跟class一样 只不过默认访问权限变成public的了 如果用了vector的话,则vector里面的数据类型就不是单纯的如int,char这样的基本类型了 也就是说 不加vector前 struct是POD类型,加了之后就不是了,也就不再支持memcpy这样的操作(用memcpy拷贝非POD的结构体或类时,有可能越界)
Thanks! 谢谢大家。
图灵狗 2013-03-19
  • 打赏
  • 举报
回复
用法上没什么问题,不过用std::vector指针会更为合理更加灵活一些。
引用 楼主 zhuyf87 的回复:
C/C++ code?123456789101112131415161718192021// 无码出库记录typedef struct{ TCHAR billNumber[50]; TCHAR materielNumber[50]; TCHAR scannedTime[50]; TCHAR location[50]; TCHAR staffN……
  • 打赏
  • 举报
回复
没有问题,只是如三楼和6楼所说,不能简单的用memcpy了
乔巴好萌 2013-03-19
  • 打赏
  • 举报
回复
一点问题都没有 跟class一样 只不过默认访问权限变成public的了 如果用了vector的话,则vector里面的数据类型就不是单纯的如int,char这样的基本类型了 也就是说 不加vector前 struct是POD类型,加了之后就不是了,也就不再支持memcpy这样的操作(用memcpy拷贝非POD的结构体或类时,有可能越界)
zhuyf87 2013-03-19
  • 打赏
  • 举报
回复
引用 4 楼 rocktyt2 的回复:
这样做没有问题,要说注意点的话,就是不要直接操作struct的内存了
好,已经这么用了。不会直接操作内存。
rocktyt 2013-03-19
  • 打赏
  • 举报
回复
这样做没有问题,要说注意点的话,就是不要直接操作struct的内存了
赵4老师 2013-03-19
  • 打赏
  • 举报
回复 1
vector是对象,不是一段内存,放在struct里面不妥。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧