概要
C++でJSONを使いたいと思い、vcpkg
というパッケージ管理ツールを使ってnlohmann-json
という有名なJsonファイル取り扱いツールをインストールしました。しかし、いざ使おうと思ってVisual StudioのC++プロジェクトで#include "nlohmann\json.hpp"
と打つと、以下のエラーが出てincludeできません:
E1696: ソースファイルを開けません"nlohmann\json.hpp"
経緯
nlohmann-jsonのサイトにてnlohmann-json
のインストール方法を調べると、今まで使っていたScoop
というパッケージ管理ツールをサポートしていないようだったので、急遽代わりにvcpkg
というパッケージ管理ツールをインストールすることにしました。そこで、vcpkgのサイトを参考に、以下の手順でvcpkgのインストールし、続けてnlohmann-json
をインストールしました:
//vcpkgを公開しているgithubのリポジトリをクローン > git clone https://github.com/microsoft/vcpkg //vcpkgフォルダ内のbootstrap-vcpkg.batを起動し、vcpkg.exeを作成 > .\vcpkg\bootstrap-vcpkg.bat // nlohmann-jsonをインストール > .\vcpkg\vcpkg install nlohmann-json
また、どうやらvcpkgにはVisual Studioと連携する機能があるらしく、よくわかりませんがとりあえず以下のように実行しました:
//In order to use vcpkg with Visual Studio, run the following command (may require administrator elevation): > .\vcpkg\vcpkg integrate install
すると、以下のように表示されました:
Applied user-wide integration for this vcpkg root. All MSBuild C++ projects can now #include any installed libraries. Linking will be handled automatically. Installing new libraries will make them instantly available. CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=C:/Users/私のユーザー名/package_management/vcpkg_git/vcpkg/scripts/buildsystems/vcpkg.cmake"
よく分かりませんが、このサイトによると、
vcでintegrate install をしてあるとき
インストール済みのライブラリが自動で利用可能になる。
"#include " と書くと自動で解決、dllのコピーなどをやってくれる。
(既定の追加のインクルードディレクトリに、"$(VcpkgRoot)include"というものが増えている。)
とあり、これで何もしなくてもvcpkgでインストールしたヘッダファイルに限っては、Visual Studio上で#include
すれば使用できるようです。
ここまで来て、Visual StudioのC++プロジェクトを立ち上げて#include "nlohmann\json.hpp"
と打ちこんだところ、冒頭のエラーが発生しました。
解決したいこと
"nlohmann\json.hpp"
をC++プロジェクトで使用できるようにしたいのですが、どうすればよいでしょうか?
ご回答よろしくお願いします。
追記
こちらのstackoverflowの質問でもvcpkgでインストールしたパッケージの#include
が上手くいかなかったそうですが、原因は
「tripletがx64のプログラムを開発していたにもかかわらず、vcpkg側のtripletがx86になっていた」
そうです。
一度そこも確認してみたいのですが、vcpkgをx86でインストールしてしまっているか調べる方法、また、tripletをx64に切り替える方法はどうすればよいでしょうか?
追追記
試しにVisual Studioの「ソリューションエクスプローラー」の「外部依存関係」フォルダに、vcpkgでインストールしてきたnlohmann
フォルダをコピーしたところ、#include
には成功しました。(おそらく、なんらかの原因でintegrate install
コマンドが効いていなかったのかもしれません)
しかし、名前空間の設定の個所でもう一つのエラーが残っています。サイトの指示に従って、
using json = nlohmann::json;
と入力したところのnlohmann
に赤い波線がかかって、
E0276:名前の後に '::~' を付けることができるのはクラス名または名前空間名だけです
というエラーが出ています。マニュアルを確認する限り、タイプミスではないと思うのですが、何がいけないのでしょうか?
追追追記
すみません。#include "nlohmann\json.hpp"
と打っていたのを``#include <nlohmann\json.hpp>`と書き換えたところ、上のエラーが消えました。
いくつか疑問点が残りましたが、とりあえずエラー自体は解消したので、1,2日以内に質問を閉じようと思います。ご回答ありがとうございました。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/30 11:07
2021/03/30 11:36 編集