スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

std:min、std::max 使用時に出る C2589 '(': スコープ解決演算子 (::) の右側にあるトークンは使えません

無事長崎から帰ってきました。
すごくいい所でした。
ハウステンボス楽しみにしてたので凄く満足です!
美味しいものいっぱいありますね・・・!


帰宅後はまたボチボチとプログラムをやってます。
今日出たエラーについて記事にしてみました。

#include <algorithm>
を定義し、std::min、std::max を使用した時下記エラーが出ました。

サンプルコード:
abc = std::max(abc - 1, 0);

C2589 '(': スコープ解決演算子 (::) の右側にあるトークンは使えません

何でだろうと思い調べてみるとこんな記事が。

https://support.microsoft.com/ja-jp/kb/143208 より抜粋。

問題は、min と max の競合する定義で発生します。
Min および max」は次のように Windef.h でマクロとして定義されます。


何気なしに使ってた <windows.h> との競合が原因だったようです。
解決方法については


NOMINMAX のプリプロセッサ シンボルを定義します。
これは、Developer Studio プロジェクトをビルド、設定、C または C++] タブの [プリプロセッサ] カテゴリで、上で実行できます。これは、最小、Windef.h で最大の定義に表示されません。


日本語については置いておくとして、

#define NOMINMAX
#include <windows.h>

windows.h を include する前にこんな感じで防ぐことが出来るみたいです。
サンプルプログラムでよく使ってたのですが何気に Windows アプリケーション開発の中では初だったんだなと思いました。

ふ~んって感じの記事でしたがとりあえず書いてみました。

マクロ展開しないとかほかの方法で回避も出来ると思いますが、せっかく公式に書いてたので
この方法を使ったら普通に使えるようになりました。

この記事へのコメント

- SergioIrorp - 2017年03月20日 08:00:52

http://loveawake.ru - Знакомства Alto. Сайт знакомств Alto бесплатно, без регистрации, для серьезных отношений.

トラックバック

URL :

検索フォーム
プロフィール

DVDM

Author:DVDM
自作ゲームの開発過程ブログ。
赤髪愛なら誰にも負けない。

 
Pixiv バナー


ブロとも申請フォーム
最新記事
カテゴリ
最新コメント
最新トラックバック
RSSリンクの表示
リンク
ブロとも一覧
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。