VisualC++でsvgppライブラリをincludeしたときのビルドエラーの解決方法

この記事は公開から3年以上経過しています。

WindowsのC++開発でSVGを扱うためのOSSライブラリを使用しようとした際に発生したビルドエラー解決策についての備忘録。

問題

Visual Studio 2019 のC++開発でSVGライブラリsvgppをインクルードすると、以下のようなエラーが発生する場合がある。

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー C2332 ‘struct’: タグ名がありません svggtest210609 C:\XXX\include\svgpp\detail\dict\enumerate_literal_values.inc 123
エラー C2628 ‘svgpp::tag::value::‘ の後に ‘char’ を続けて記述できません(セミコロン ‘;’ で区切ってあるか確認してください)。 svggtest210609 C:\XXX\include\svgpp\detail\dict\enumerate_literal_values.inc 123
エラー C2059 構文エラー: ‘関数形式のキャスト’ svggtest210609 C:\XXX\include\svgpp\detail\dict\enumerate_literal_values.inc 123
エラー C2143 構文エラー: ‘;’ が ‘{‘ の前にありません。 svggtest210609 C:\XXX\include\svgpp\detail\dict\enumerate_literal_values.inc 123
エラー C2447 ‘{‘: 対応する関数ヘッダーがありません (旧形式の仮引数リスト?) svggtest210609 C:\XXX\include\svgpp\detail\dict\enumerate_literal_values.inc 123

原因

Windows.hなどのWindows開発用ヘッダなどからインクルードされるRpcNdr.hに定義されている型定義のsmallと、svgppが定義するsmall構造体で衝突が発生する。

対応

svgpp/svgpp.hppWindows.hよりも前にインクルードする。

Before

#include <Windows.h>
#include "svgpp/svgpp.hpp"

After

#include "svgpp/svgpp.hpp"
#include <Windows.h>

参考ウェブサイトなど

GitHub
svgpp/svgpp

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする