- - PR -
VC++7におけるCStringの宣言について
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-08-14 18:41
VC++6 から VC++7 に移行しているのですが、以下のコードで
fatal error C1001: 内部コンパイラ エラー (コンパイラ ファイル 'msc1.cpp', 行 2701) というエラーが発生しています。 <http://support.microsoft.com/kb/843408/ja> を参照したところVisual C++ .NET 2003のバグっぽいのですが。。。 この場合どのように回避したらいいでしょうか?? また、VC++初心者であるためもコードもいまいちよくわかっていません。 (CStringをオーバーライトしているのでしょうか??) -- コード swcVariantC::operator class CString ()const { return GetStringData(); } CString swcVariantC::GetStringData() const { CString str; switch(mVariantType){ case VT_EMPTY: return str; break; case VT_USHORT: str.Format("%hu", mUShort); return str; break; case VT_SHORT: str.Format("%d", mShort); return str; break; case VT_ULONG: str.Format("%lu", mULong); return str; break; case VT_LONG: str.Format("%ld", mLong); return str; break; case VT_FLOAT: str.Format("%f", mFloat); return str; break; case VT_DOUBLE: str.Format("%lf", mDouble); return str; break; case VT_CHAR: return (CString)mChar; break; case VT_DATE: return mDateTime->Format( "%Y-%m-%d %H:%M:%S" ) ; break; case VT_STRING: return *mString; break; default: ASSERT(0); // 文字列に変換できないのでアサート!! return str; break; } return CString(""); } よろしくお願いします。 [ メッセージ編集済み 編集者: ちばじん 編集日時 2007-08-14 18:42 ] | ||||||||||||
|
投稿日時: 2007-08-14 20:15
こんばんは。
エラーメッセージが不味いという点では、Visual C++ .NET 2003のバグですが、 参照ページを見ての通り、掲示されたソースコードにエラーがあります。 ちなみに、今私の手元にあるVisual Studio Orcas ベータ版でコンパイルすると error C2371: 'CString' : redefinition; different basic types と正しくエラーを指摘してくれます。
おそらくキャスト演算子のオーバーロードをしたいのだと思いますが、 下記の1行から"class"を削除すればよいです。
| ||||||||||||
|
投稿日時: 2007-08-14 20:52
こんばんは。
Tdnr_Symさん。お返事ありがとうございます。
この方法でやったのですが他のエラーが発生してしまいます。。。 ・・・さっぱりわかりません。。。 --エラー ・error C2738: 'operator ATL::CStringT<BaseType,StringTraits>' があいまいか、または 'swcVariantC' のメンバではありません。 with [ BaseType=char, StringTraits=StrTraitMFC_DLL<char> ] ・error C3861: 'GetStringData': 識別子は、引数依存の照合を使用しても見つかりません。 | ||||||||||||
|
投稿日時: 2007-08-14 21:16
こんばんは。
ある程度こういう返信を想定していましたが、 やはりもう少し丁寧にフォローする必要がありますか。 掲示されたコード以外のところに、下記のようなコードもあるはずです。 探してみてください。同じように"class"を削除してください。
| ||||||||||||
|
投稿日時: 2007-08-14 21:47
こんばんは
Tdnr_Symさんお返事ありがとうございます。
・・・すいません。。。VC++は初心者なもので。。。
ご指摘の通り、他にも上のようなところがあり、classを削除したらうまくいきました。 いろいろありがとうございました。 |
1