この記事は公開から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.hpp
をWindows.h
よりも前にインクルードする。
Before
#include <Windows.h>
#include "svgpp/svgpp.hpp"
After
#include "svgpp/svgpp.hpp"
#include <Windows.h>
参考ウェブサイトなど
GitHub
svgpp/svgpp
以上です。