• 締切済み

xcode符合違いエラーについて

こんにちは。 質問させてください。 現在Xcode 5.0.2(5A3005)でコードを書いていますが unsigned int a[2] = {100,200}; int b[2] = {a[0],a[1]}; というようなコード(実際には配列の中身は数千)で Non-constant-expression cannot be narrowed from type 'unsigned int' to 'int' in initializer list; というエラーが出てビルド出来ません。 海外のSDKのコードなので書き換えるのが面倒臭くコードを書き換えずエラーを消したいのですが、Xcodeのどこのフラグを切り替えればいいでしょうか? ※趣味コードなのでバグが出るから治せというコメントは不要です。

みんなの回答

回答No.1

これは、Xcode のレベルではなく、C++ のレベルの(警告でもなく)エラーなので、Xcode がわでは、どうしようもない気がしますが。 実際、unsigned int の変数で、 int を初期化するというのが、普通ではないですから、なぜそういうことになっているのか自問した上で、 a の型を int にするか、b の型を unsigned int にするかどちらかしかないのではないかと思います。 最も、b の型をいじると、さらに、山のようなエラーが発生する可能性もありますが。

0xEF
質問者

お礼

ありがとうございます。 私の経験から言えばこの型違いはエラーではなく警告になるものという認識がありましたのでXcodeの警告レベル(実際にはエラーなので違うフラグかもしれませんが)等の変更で回避出来ると考えて、そういったフラグの変更箇所を探しておりました。 現にVisualStudioでは警告をエラーとして表示、などのオプションがありますので。 また海外のSDK内のコードですので何故intをunsigned intで初期化しているかはよくわかりません。VisualStudio2008とVisualStudio2010では警告は出たもののビルドは通ったのでLLVMコンパイラ特有のエラーかもしれません。 面倒だったので当該初期化処理の入った関数をHoge.cppから別ファイルのHogeFunc.cに分離し、型チェックがC++よりも甘いCコードとして無理矢理コンパイルしてリンクし動かすことで今回の問題は解決しました。 ありがとうございました。

関連するQ&A