fix: correct mismatched class and struct declarations (#911)

Keep Projections and TableMetadataBuilder::Impl declarations consistent
with their definitions to avoid mismatched-tag diagnostics and potential
link failures under the Microsoft C++ ABI.
diff --git a/src/iceberg/expression/projections.h b/src/iceberg/expression/projections.h
index b2022c4..59edc92 100644
--- a/src/iceberg/expression/projections.h
+++ b/src/iceberg/expression/projections.h
@@ -43,7 +43,7 @@
   Result<std::shared_ptr<Expression>> Project(const std::shared_ptr<Expression>& expr);
 
  private:
-  friend class Projections;
+  friend struct Projections;
 
   /// \brief Create a ProjectionEvaluator.
   ///
diff --git a/src/iceberg/table_metadata.h b/src/iceberg/table_metadata.h
index fd2c271..6e2d9fe 100644
--- a/src/iceberg/table_metadata.h
+++ b/src/iceberg/table_metadata.h
@@ -489,7 +489,7 @@
   explicit TableMetadataBuilder(const TableMetadata* base);
 
   /// Internal state members
-  struct Impl;
+  class Impl;
   std::unique_ptr<Impl> impl_;
 };