C++からAzure Storage Serviceを使おうとしたらエラーに引っかかりかけた
C++からAzure Storage Serviceを使うために、Microsoftのドキュメントを参考に進めていたらエラーが出て困った話。
環境
自分のPC環境は以下の通りである。
環境 | |
---|---|
OS | Windows10 Pro 64bit version 1709 |
Visual Studio | Community 2017 version15.7.6 |
NuGet パッケージマネージャー | 4.6.0 |
やっていたこと
以下のMicrosoft Azureのドキュメントを参考に、Azure Storage ServiceのBLOBストレージを使うC++プログラムを作ろうとしていた。
NuGetパッケージマネージャーで wastorage
をインストールして、ライブラリをインクルードした。VisualStudioの画面上ではエラーや警告の波線は出ていない
NuGetを使ってパッケージをインストール
ライブラリをインクルード
しかし、ビルドするとドキュメント通り行ったにもかかわらず、以下のエラーが出てくる。
解決方法
上記のエラーの原因は、バージョン違い?によるライブラリ側の構文エラーと環境の問題であった。
ライブラリ側の構文エラーを直す
1行目の E0427 メンバー宣言では修飾名は使用できません
のエラーは cpprestsdk
のヘッダファイル asyncrt_utils.h
の491行目で発生しており、以下の図の datetime::
に波線が出ていた。
波線の出ている datetime::
を削除することでエラーE0427は消える。
- asyncrt_utils.h の 491行付近
以下の図のようにGitHubにあるcpprestsdkの同様のファイルを見たら、構文はしっかりしているため、NuGetでインストールしたパッケージのcpprestsdkのバージョンの問題であると思われる。
https://github.com/Microsoft/cpprestsdk/blob/master/Release/include/cpprest/asyncrt_utils.h
ライブラリに合った環境を設定
cpprestsdkとMicrosoftAzureStorageCPPのツールセットバージョンが v140
であり、Visual Studio 2017のツールセットは v141
である。そのため、ツールセットバージョンの違いにより、エラーが出ていた。
以下の図のように、Visual Studio 2017 Installerを起動し、個別のコンポーネントから デスクトップ用VC++ 2015.3 v14.00 (v140) ツールセット
にチェックを入れ、インストールする。ツールセットの項目は「コンパイラ、ビルドツール、およびランタイム」の欄にある。
インストールいたら、プロジェクトプロパティを開き、構成プロパティ
> 全般
> プラットフォームツールセット
から Visual Studio 2015 (v140)
を選択し、適用する。