Open7
Macで作っていたopenFrameworkプロジェクトをWindowsに移植するときのあるあるエラー集
WH_MINとWH_MAXが使われてる
enum {
AREA, WIDTH, HEIGHT, WH_MIN, WH_MAX, WH_AVERAGE, WH_MULTIPLY, DIAGONAL
};
WH_MIN
とWH_MAX
がWinUser.h
で#define
されているためエラー。
名前を変更して対処した。
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;
far
がminwindef.h
で#define
されているためエラー。
名前を変更して対処。
ちなみにnearもだめ。
こういうgeneralな名前を占有するのやめてほしい。。
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>
して対処。
値を返さないコントロール パスがあります
return
漏れ。
nlohmann_jsonの暗黙キャスト(openFrameworks)
'insert': 'boost::filesystem::path' のメンバーではありません。 (ソース ファイルをコンパイルしています addons\ofxComposableShader\src\ofxComposableShader.cpp)
ofLoadImage(tex, t.second["value"])
で発生。(t.second
はnlohmann::json
)
nlohmann::json
をboost::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);
オブジェクト名重複
warning MSB8027: Gui.cpp という名前の複数のファイルでは、同じ場所に出力が生成されます。これにより、不適切なビルド結果が生じる可能性があります。関連するファイルは src\gui\Gui.cpp, addons\ofxImGui\src\Gui.cpp です。
Gui.cppの名前を変更して対処。
その後、関数や変数の重複定義(~は既に~で定義されています)のリンクエラーが起こる可能性がある。(エラーを保存し忘れた・・・)
その場合はプロジェクトをクリーンまたはリビルドすればOK。
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()
と名前空間を指定して呼ぶことにして対処。