ページ 11

gmpxx.hでC4146エラー

Posted: 2016年3月30日(水) 12:35
by sudnonk
初投稿です。
C++で任意精度演算をしようと思い、以下の手順でVisualStudio2015で扱ってみました。Windows10です。
1.MPIR(2.7.2)をダウンロードし、build.vc14のmpir.slnを開いてdll_mpir_gcをビルド
2.VS2015のプロジェクトのプロパティからV/C++ディレクトリのインクルードディレクトリにgmp.hやgmpxx.h、mpir.dllなどがあるフォルダパスを追加
3.C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\binにvsyasm.exeを追加、\libにmpir.libとmpir.pdbをコピー
4.プロジェクトのプロパティ、リンカーの入力の追加の依存ファイルにmpir.libを追加

そして以下のコードを書き、ビルドしてみました。

コード:

#include "stdafx.h"
#include <iostream>
#include "gmpxx.h"
//#include "mpirxx.h"も試しましたが同様

int main() {
	mpz_class a = 0 ,b = 1;
	a = a + b;
	std::string c = a.get_str();
	std::cout << c;

	return 0;
}
すると、C4146 符号付きの値を代入する変数は、符号付き型にキャストしなければなりません。 のエラーが起きました。また、警告としてC4800 'int': ブール値を 'true' または 'false' に強制的に設定します (警告の処理)と言われました。両方gmpxx.h(mpirxx.h)でのエラーのようです。
検索してみる限りgmpの導入段階でのミスのようなのですが、調べた限りでは上記の4手順ですべてのような気がします。(gcならyasmはいらないような気もします。)
C++自体初心者なのでなにか致命的なミスをしているかもしれません…。何を間違っているのでしょうか?
gccを使うべきとはわかっていますが、このままできないのも気持ち悪いのでなんとか解決したいです。
よろしくお願いします。

Re: gmpxx.hでC4146エラー

Posted: 2016年3月31日(木) 11:33
by いわん
発生しているエラーが警告だけのようなので、使用しているライブラリ・ヘッダーが間違いなく VisualStudio2015 用のものであるなら問題ないのではないでしょうか。
コンパイラオプションで「警告をエラーとして扱う」をいいえ(/WX-)にしないとビルドに失敗しますけど。

Re: gmpxx.hでC4146エラー

Posted: 2016年4月20日(水) 00:32
by sudnonk
すみません返信気づきませんでした!二十日も経ってしまいましたごめんなさい!

警告って無視できるんですね、初めて知りました。
ちゃんと実行できました。本当にありがとうございました。