我下载了Google协议缓冲区3.6.0和适用于3.6.0的正确的protoc.exe。
我的protoc.exe与.proto文件位于同一目录中,并且已经运行:
protoc -I=. --cpp_out=. ./xxxxxxx.proto
我得到了.h和.cc文件,但是当我尝试编译运行它们的程序时,却出现了如下错误:
google / protobuf / stubs / mutex.h(81):错误C2614: 'google :: protobuf :: internal :: MutexLockMaybe':非法成员 初始化:“ mu_”不是基础或成员
(我正在使用VS2012)
任何想法
答案 0 :(得分:4)
从此版本开始,我们现在需要C ++ 11。对于那些我们不能 尚未升级到C ++ 11,我们将尝试保持3.5.x分支更新 仅修复了严重的错误。
从this table可以看出,VS 2012具有许多未实现的C ++ 11功能。
因此,您可以选择:使用较旧的Google协议缓冲区3.5或使用最新的Visual Studio。如果可以的话,还是gcc。
答案 1 :(得分:2)
对于protobuf,应使用较旧的编译器。 2.6.1还可以,我用它。或切换到VS 2015/2017并在那里进行开发。我建议使用VS 2017 for C ++ 11。