diff --git a/src/cam/options.cpp b/src/cam/options.cpp
index 417c3ab49bc9..41968caa0ccb 100644
--- a/src/cam/options.cpp
+++ b/src/cam/options.cpp
@@ -17,6 +17,21 @@
  * Option
  */
 
+struct Option {
+	int opt;
+	OptionType type;
+	const char *name;
+	OptionArgument argument;
+	const char *argumentName;
+	const char *help;
+	KeyValueParser *keyValueParser;
+	bool isArray;
+
+	bool hasShortOption() const { return isalnum(opt); }
+	bool hasLongOption() const { return name != nullptr; }
+	const char *typeName() const;
+};
+
 const char *Option::typeName() const
 {
 	switch (type) {
@@ -129,6 +144,9 @@ template class OptionsBase<std::string>;
  * KeyValueParser
  */
 
+KeyValueParser::KeyValueParser() = default;
+KeyValueParser::~KeyValueParser() = default;
+
 bool KeyValueParser::addOption(const char *name, OptionType type,
 			       const char *help, OptionArgument argument)
 {
@@ -349,6 +367,9 @@ std::vector<OptionValue> OptionValue::toArray() const
  * OptionsParser
  */
 
+OptionsParser::OptionsParser() = default;
+OptionsParser::~OptionsParser() = default;
+
 bool OptionsParser::addOption(int opt, OptionType type, const char *help,
 			      const char *name, OptionArgument argument,
 			      const char *argumentName, bool array)
diff --git a/src/cam/options.h b/src/cam/options.h
index d0defb4bd665..688fe26011f8 100644
--- a/src/cam/options.h
+++ b/src/cam/options.h
@@ -14,6 +14,7 @@
 
 class KeyValueParser;
 class OptionValue;
+struct Option;
 
 enum OptionArgument {
 	ArgumentNone,
@@ -28,21 +29,6 @@ enum OptionType {
 	OptionKeyValue,
 };
 
-struct Option {
-	int opt;
-	OptionType type;
-	const char *name;
-	OptionArgument argument;
-	const char *argumentName;
-	const char *help;
-	KeyValueParser *keyValueParser;
-	bool isArray;
-
-	bool hasShortOption() const { return isalnum(opt); }
-	bool hasLongOption() const { return name != nullptr; }
-	const char *typeName() const;
-};
-
 template<typename T>
 class OptionsBase
 {
@@ -73,7 +59,8 @@ public:
 	{
 	};
 
-	virtual ~KeyValueParser() = default;
+	KeyValueParser();
+	virtual ~KeyValueParser();
 
 	bool addOption(const char *name, OptionType type, const char *help,
 		       OptionArgument argument = ArgumentNone);
@@ -133,6 +120,9 @@ public:
 	{
 	};
 
+	OptionsParser();
+	~OptionsParser();
+
 	bool addOption(int opt, OptionType type, const char *help,
 		       const char *name = nullptr,
 		       OptionArgument argument = ArgumentNone,
