diff --git a/lib/cpp/src/thrift/protocol/TBinaryProtocol.h b/lib/cpp/src/thrift/protocol/TBinaryProtocol.h
index b431440..7b829c7 100644
--- a/lib/cpp/src/thrift/protocol/TBinaryProtocol.h
+++ b/lib/cpp/src/thrift/protocol/TBinaryProtocol.h
@@ -166,19 +166,19 @@
 
   inline uint32_t readBinary(std::string& str);
 
-  int getMinSerializedSize(TType type);
+  int getMinSerializedSize(TType type) override;
 
-  void checkReadBytesAvailable(TSet& set)
+  void checkReadBytesAvailable(TSet& set) override
   {
       trans_->checkReadBytesAvailable(set.size_ * getMinSerializedSize(set.elemType_));
   }
 
-  void checkReadBytesAvailable(TList& list)
+  void checkReadBytesAvailable(TList& list) override
   {
       trans_->checkReadBytesAvailable(list.size_ * getMinSerializedSize(list.elemType_));
   }
 
-  void checkReadBytesAvailable(TMap& map)
+  void checkReadBytesAvailable(TMap& map) override
   {
       int elmSize = getMinSerializedSize(map.keyType_) + getMinSerializedSize(map.valueType_);
       trans_->checkReadBytesAvailable(map.size_ * elmSize);
diff --git a/lib/cpp/src/thrift/protocol/TCompactProtocol.h b/lib/cpp/src/thrift/protocol/TCompactProtocol.h
index 6f990b2..792a2d8 100644
--- a/lib/cpp/src/thrift/protocol/TCompactProtocol.h
+++ b/lib/cpp/src/thrift/protocol/TCompactProtocol.h
@@ -140,19 +140,19 @@
 
   uint32_t writeBinary(const std::string& str);
 
-  int getMinSerializedSize(TType type);
+  int getMinSerializedSize(TType type) override;
 
-  void checkReadBytesAvailable(TSet& set)
+  void checkReadBytesAvailable(TSet& set) override
   {
       trans_->checkReadBytesAvailable(set.size_ * getMinSerializedSize(set.elemType_));
   }
 
-  void checkReadBytesAvailable(TList& list)
+  void checkReadBytesAvailable(TList& list) override
   {
       trans_->checkReadBytesAvailable(list.size_ * getMinSerializedSize(list.elemType_));
   }
 
-  void checkReadBytesAvailable(TMap& map)
+  void checkReadBytesAvailable(TMap& map) override
   {
       int elmSize = getMinSerializedSize(map.keyType_) + getMinSerializedSize(map.valueType_);
       trans_->checkReadBytesAvailable(map.size_ * elmSize);
diff --git a/lib/cpp/src/thrift/protocol/TJSONProtocol.h b/lib/cpp/src/thrift/protocol/TJSONProtocol.h
index e775240..d01bdf8 100644
--- a/lib/cpp/src/thrift/protocol/TJSONProtocol.h
+++ b/lib/cpp/src/thrift/protocol/TJSONProtocol.h
@@ -245,19 +245,19 @@
 
   uint32_t readBinary(std::string& str);
 
-  int getMinSerializedSize(TType type);
+  int getMinSerializedSize(TType type) override;
 
-  void checkReadBytesAvailable(TSet& set)
+  void checkReadBytesAvailable(TSet& set) override
   {
       trans_->checkReadBytesAvailable(set.size_ * getMinSerializedSize(set.elemType_));
   }
 
-  void checkReadBytesAvailable(TList& list)
+  void checkReadBytesAvailable(TList& list) override
   {
       trans_->checkReadBytesAvailable(list.size_ * getMinSerializedSize(list.elemType_));
   }
 
-  void checkReadBytesAvailable(TMap& map)
+  void checkReadBytesAvailable(TMap& map) override
   {
       int elmSize = getMinSerializedSize(map.keyType_) + getMinSerializedSize(map.valueType_);
       trans_->checkReadBytesAvailable(map.size_ * elmSize);
