2011-12-14 14 views
4

私はmingw-w64を使用しています。私はstrsafe.hを含めて、次の警告を取得しています:私が使用g ++の "インライン関数が使用されたが決して定義されていない"警告を取り除く方法

warning: inline function 'HRESULT StringCchPrintfA(STRSAFE_LPSTR, size_t, STRS 
AFE_LPCSTR, ...)' used but never defined [enabled by default] 

のみのフラグフラグは-Wall -DDEBUG -gをしています。私はあなたが同じヘッダのインライン関数を定義しなければならないことを知っています。私はstrsafe.hを見て、明らかにヘッダにStringCchPrintfAがあることがわかります。なぜこのエラーが出るのか分かりません。また、ここにはa link to strsafe.h if you want to look at the header yourselfがあります。

編集:

私はオンライン次のスニペットを見つけました(誰がより多くの情報を提供することができるなら、私に知らせてください、コメントで言って何をしようとしている?):

// Work around lack of strsafe library in mingw-w64, do let their 
// strsafe.h provide inlines of StringCchVPrintfA etc, avoid linking 
// errors in a debug build. 
#ifdef __CRT__NO_INLINE 
#undef __CRT__NO_INLINE 
#define DID_UNDEFINE__CRT__NO_INLINE 
#endif 
extern "C" { 

#endif 

#include <strsafe.h> 

#ifdef __MINGW32__ 
} 

#ifdef DID_UNDEFINE__CRT__NO_INLINE 
#define __CRT__NO_INLINE 
#endif 
#endif 
+0

__CRT__NO_INLINEはどこかで定義されているので、関数は実際には定義されていませんか? – tpg2114

+0

@ tpg2114 ___CRT__NO_INLINEが定義されている場合、 'StringCchPrintfA'はインライン関数ではありません。 –

+0

あなたが投稿したヘッダーのリンクには、#define STRSAFEAPI static __inline HRESULT WINAPIがありますので、関数は__CRT__NO_INLINEの状態に関係なく 'static __inline'です。 – tpg2114

答えて

1

コメントはstrsafeライブラリであるはずですが、そこには存在しないことを示しています。 __CRT__NO_INLINEの定義は、ヘッダーからのinlineのものを使うのではなく、関数を提供するためにどこかコンパイルされたライブラリがあることを暗示しなければなりません。

したがって、そのライブラリが存在しない場合(ただし、そうする必要があると思われます)は、インライン関数を使用できるようにします。

しかし、これはリンクエラーを修正するためです。コードをコンパイルするときにリンクエラーが発生しますか?それとも警告を受け取るだけですか?あなたが警告を得るだけであれば、実際にはstrsafeライブラリを持っていることを意味します。メッセージを排除してコンパイルされたバージョンの関数を使用する方法がないことは、まったくもっともらしいことです。

+0

+1:ありがとうございました。私は '#undef __CRT__NO_INLINE'と' #define __CRT__NO_INLINE'を使って 'strsafe.h'をラップすることにしました。その他の情報は、[this](http://www.mail-archive.com/[email protected]/msg03658.html)でした。また、マイクロソフトはリンクできる 'strsafe.lib'ファイルを持っていますが、Mingw-w64はそれを持っていません。 –

関連する問題