Open7

Macで作っていたopenFrameworkプロジェクトをWindowsに移植するときのあるあるエラー集

Nariaki IwataniNariaki Iwatani

WH_MINとWH_MAXが使われてる

enum {
	AREA, WIDTH, HEIGHT, WH_MIN, WH_MAX, WH_AVERAGE, WH_MULTIPLY, DIAGONAL
};

WH_MINWH_MAXWinUser.h#defineされているためエラー。
名前を変更して対処した。

Nariaki IwataniNariaki Iwatani

farが使われてる

      vec_t far;
      matrix_t projectionInverse;
      projectionInverse.Inverse(gContext.mViewProjection);
      far.Transform(makeVect(0, 0, 10.f, 1.f), projectionInverse);
      gContext.mReversed = (far.z/far.w) < 0.f;

farminwindef.h#defineされているためエラー。
名前を変更して対処。

ちなみにnearもだめ。
こういうgeneralな名前を占有するのやめてほしい。。

Nariaki IwataniNariaki Iwatani

glm::qua<>が未定義(openFrameworks)

'ofParameter<glm::quat>::Value::value' が 未定義の struct 'glm::qua<float,0>' で使用しています。 (ソース ファイルをコンパイルしています src\pcl\PCLSource.cpp)

#include ofNode.hしている個所で起こることがある。
ofNode.hの前に#include <glm/gtc/quaternion.hpp>して対処。

Nariaki IwataniNariaki Iwatani

nlohmann_jsonの暗黙キャスト(openFrameworks)

'insert': 'boost::filesystem::path' のメンバーではありません。 (ソース ファイルをコンパイルしています addons\ofxComposableShader\src\ofxComposableShader.cpp)

ofLoadImage(tex, t.second["value"])で発生。(t.secondnlohmann::json)

nlohmann::jsonboost::filesystem::pathに暗黙に変換しようとしてエラー?
どこかでinsertを呼んでいるのだろうが、見つけられなかった。

これではだめだった。
ofLoadImage(tex, t.second["value"].get<std::string>())

E0434	型 "boost::filesystem::path::iterator &" の参照 (const で修飾されていない) は型 "boost::filesystem::path::iterator" の値では初期化できません

これで対処。

std::string filename = t.second["value"];
ofLoadImage(tex, filename);
Nariaki IwataniNariaki Iwatani

オブジェクト名重複

warning MSB8027: Gui.cpp という名前の複数のファイルでは、同じ場所に出力が生成されます。これにより、不適切なビルド結果が生じる可能性があります。関連するファイルは src\gui\Gui.cpp, addons\ofxImGui\src\Gui.cpp です。

Gui.cppの名前を変更して対処。

その後、関数や変数の重複定義(~は既に~で定義されています)のリンクエラーが起こる可能性がある。(エラーを保存し忘れた・・・)
その場合はプロジェクトをクリーンまたはリビルドすればOK。

Nariaki IwataniNariaki Iwatani

関数名かぶりEndMenu()

E0308	オーバーロードされた関数 "EndMenu" の複数のインスタンスが引数リストと一致します

1>c:\users\nariakiiwatani\documents\works\of0.11\apps\pcltool\pcltool\src\ofapp.cpp(149): error C2668: 'EndMenu': オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)
1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\winuser.h(7614): note: 'BOOL EndMenu(void)' の可能性があります (ソース ファイルをコンパイルしています src\ofApp.cpp)
1>c:\users\nariakiiwatani\documents\works\of0.11\apps\pcltool\pcltool\addons\ofximgui\libs\imgui\src\imgui.h(593): note: または 'void ImGui::EndMenu(void)' (ソース ファイルをコンパイルしています src\ofApp.cpp)
1>c:\users\nariakiiwatani\documents\works\of0.11\apps\pcltool\pcltool\src\ofapp.cpp(149): note: 引数リスト '()' を一致させようとしているとき

using namespace ImGui;してEndMenu()と記述していて発生。
winuser.hにもEndMenu()があるらしい。

WINUSERAPI
BOOL
WINAPI
EndMenu(
        VOID);

EndMenuはImGui::EndMenu()と名前空間を指定して呼ぶことにして対処。