赞
踩
vs2022 第一次下载cmake 3.17 x64.msi , 发现没有vs2022选项。
第二次下载最新版本cmake 3.27 x64.msi , 发现不兼容vs2022 , 会闪退;
第三次下载了倒数第二新的版本cmake 3.26 x64.msi , 这次完美generate
1、根据类图开发
2、笔试 - 根据代码画出类图
person.proto
- syntax = "proto3";
- message person
- {
- int32 sid = 1; //编号从1开始
- string name = 2; //有中文用bytes,没中文用string就够
- string sex = 3;
- int32 age = 4;
- }
生成了两个文件:
person.pb.cc
person.pb.h
在
person.proto
文件中,我们使用了 Protocol Buffers 的版本proto3
。在这个文件中定义了一个名为person
的消息类型。
person
消息类型包含以下字段:
sid
是一个整数类型的字段,字段标签为1
,用于表示编号,编号从1开始。name
是一个字符串类型的字段,字段标签为2
,用于表示姓名。sex
是一个字符串类型的字段,字段标签为3
,用于表示性别。age
是一个整数类型的字段,字段标签为4
,用于表示年龄。根据这个
person.proto
文件,通过使用 Protocol Buffers 的编译器protoc
,我们生成了两个文件:person.pb.cc
和person.pb.h
。这两个文件是根据
person.proto
中定义的消息类型自动生成的,这两个文件里的内容是:用于序列化和反序列化person
消息的代码。通过使用这些生成的文件,我们可以在应用程序中使用person
消息类型进行数据的打包和解包。
指定头文件
无法解析的外部命令、无法定义的引用 ------> 只有头文件,却缺少动态库
/*
* 在proto文件中 加repeated变为数组
* 数组:申请一块内存,存储名字
* p.add_name();
* p.set_name(0,"小豪");
*
* p.add_name();
* p.set_name(1,"小王");
*
* p.add_name();
* p.set_name(2,"小吴"); 其他sex、age等不变 ,
打印的时候:p2.name(0) p2.name(1) p2.name(2)
*/
- syntax = "proto3";
- // 定义枚举
- enum Color
- {
- Red = 0; // protbuf中,第一个枚举值必须为0
- Green = 6;
- Blue = 9;
- }
- message Persion
- {
- int32 id = 1; // 编号从1开始
- bytes name = 2;
- string sex = 3;
- int32 age = 4;
- Color color = 5; // 定义枚举变量
- }
-
-
- //测试:重新生成.h,.cc 、 替换 、运行测试
- p.set_color(Blue);
- cout << ",color:" << p2.color(); //,color:9
- message Persion
- {
- int32 id = 1; // 编号从1开始
- bytes name = 2;
- string sex = 3;
- int32 age = 4;
- Color color = 5; // 定义枚举变量
- }
-
- message Persion1
- {
- int32 id = 1; // 编号从1开始
- bytes name = 2;
- string sex = 3;
- int32 age = 4;
- Color color = 5; // 定义枚举变量
- Person p = 6;
- }
- // Persion.proto
- syntax = "proto3";
- // 导入另外一个proto文件
- import "Info.proto";
-
- enum Color
- {
- Red = 0; // protbuf中第一个枚举值必须为0
- Green = 6;
- Blue = 9;
- }
-
- message Persion
- {
- int32 id = 1; // 编号从1开始
- repeated bytes name = 2;
- string sex = 3;
- int32 age = 4;
- Color color = 5;
- Info info = 6; // Info对象, 导入的proto文件中的类
- }
- // Info.proto
- syntax = "proto3";
-
- message Info
- {
- bytes address = 1; // 地址
- int32 number = 2; // 门牌号
- }
D:\BaiduNetdiskDownload\linux黑马32期资料\钻石课程\第5阶段-跨平台企业项目实战\day03 - 序列化-protobuf使用\01-教学资料>protoc ./person.proto --cpp_out=./
D:\BaiduNetdiskDownload\linux黑马32期资料\钻石课程\第5阶段-跨平台企业项目实战\day03 - 序列化-protobuf使用\01-教学资料>protoc ./Info.proto --cpp_out=./
c++
-
- p.set_color(Blue);
- Info* info = p.mutable_info();
- info->set_address("北京昌平区tdb大厦");
- info->set_id(911);
-
- Info li = pp.info();
-
- cout << ",address:" << li.address()
- << ",number:" << li.number() << endl;
命名空间 解决的是 两个不同文件同名类的问题(两个人分别写了一个文件,但是都文件中的message变量名相同。)
-
- ```protobuf
- // Persion.proto
- syntax = "proto3";
- // 导入另外一个proto文件
- import "Info.proto";
- // 添加命名空间
- package itcast; // Persion类属于itcast这个命名空间
-
- enum Color
- {
- Red = 0; // protbuf中第一个枚举值必须为0
- Green = 6;
- Blue = 9;
- }
-
- message Persion
- {
- int32 id = 1; // 编号从1开始
- repeated bytes name = 2;
- string sex = 3;
- int32 age = 4;
- Color color = 5;
- // 命名空间.类名
- itheima.Info info = 6; // Info对象, 导入的proto文件中的类
- }
- ```
-
- ```protobuf
- // Info.proto
- syntax = "proto3";
- // Persion类属于itheima这个命名空间
- package itheima;
-
- message Persion
- {
- bytes address = 1; // 地址
- int32 number = 2; // 门牌号
- }
- ```
-
release打断点,程序不会停
release是发布版本时,才用到。
在软件开发中,"Debug" 和 "Release" 是两种常见的构建配置或构建模式,它们之间有一些区别。
Debug 模式:
Release 模式:
综上所述,Debug 模式适用于开发和调试阶段,它提供了更多的调试信息和辅助工具,但可能会牺牲一些性能。而 Release 模式适用于最终部署或发布阶段,它会进行更多的优化以提高性能,同时减少了调试信息的生成。
在实际开发中,通常会根据需要在 Debug 模式和 Release 模式之间进行切换。在开发和测试阶段使用 Debug 模式,以便更方便地调试和分析代码。而在发布或部署阶段,使用 Release 模式以获得更好的性能和较小的文件大小。
请注意,不同的开发环境和编程语言可能会有不同的方式来配置和使用 Debug 和 Release 模式。具体的配置方式和设置取决于你使用的开发工具和平台。
vs2022使用protobuf报错总结_编程小老弟的博客-CSDN博客
遇到了报错一直解决不掉,先暂停吧。。。唉
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。