C++使用多个不同的protobuf文件会导致的重复命名问题

这次因游戏项目服务端需求,需要在游戏前端引入多个protobuf文件,直接导入pb.h和pb.cc会导致命名重复的错误,只需在*.prtoto的最上面加上包名就可以了,包名随意

package MyProto

然后再编译成pb.h和pb.cc文件导入项目,使用的时候前面加上命名空间就行了,命名空间就是你所加的包名

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ 中,解决头文件互相依赖的问题可以通过前向声明和分离接口和实现两种方式。 一、前向声明 前向声明是指在头文件中声明一个类而不包含它的定义。这样,在其他文件包含该头文件时,就可以通过类的指针或引用使用该类,而不需要包含该类的定义。 例如,假设有两个类 A 和 B,它们互相依赖。可以在 A 的头文件中声明类 B,而不包含 B 的定义: ```c++ // A.h class B; // 前向声明 class A { public: A(); void foo(B* b); }; ``` 然后在 A.cpp 文件中包含 B 的头文件,并实现 A 的成员函数: ```c++ // A.cpp #include "A.h" #include "B.h" A::A() {} void A::foo(B* b) { // 使用 B 类型指针 } ``` 同样,也可以在 B 的头文件中声明类 A: ```c++ // B.h class A; // 前向声明 class B { public: B(); void bar(A* a); }; ``` 然后在 B.cpp 文件中包含 A 的头文件,并实现 B 的成员函数: ```c++ // B.cpp #include "B.h" #include "A.h" B::B() {} void B::bar(A* a) { // 使用 A 类型指针 } ``` 二、分离接口和实现 另一种解决头文件互相依赖的方法是将接口和实现分离到不同文件中。接口包含类的声明和定义,而实现只包含类的成员函数的实现。 例如,假设有两个类 A 和 B,它们互相依赖。可以将它们的接口和实现分别放到不同文件中: A.h: ```c++ // A.h class B; // 前向声明 class A { public: A(); void foo(B* b); private: int a; }; ``` A.cpp: ```c++ // A.cpp #include "A.h" #include "B.h" A::A() {} void A::foo(B* b) { // 使用 B 类型指针 } ``` B.h: ```c++ // B.h class A; // 前向声明 class B { public: B(); void bar(A* a); private: int b; }; ``` B.cpp: ```c++ // B.cpp #include "B.h" #include "A.h" B::B() {} void B::bar(A* a) { // 使用 A 类型指针 } ``` 这样,如果其他文件需要使用 A 或 B 类的接口,只需要包含相应的头文件即可。如果需要使用 A 或 B 类的实现,只需要链接相应的实现文件即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值