- PR -

VC++7におけるCStringの宣言について

1
投稿者投稿内容
ちばじん
会議室デビュー日: 2007/08/14
投稿数: 7
投稿日時: 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 ]
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-08-14 20:15
こんばんは。

引用:

ちばじんさんの書き込み (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のバグっぽいのですが。。。



エラーメッセージが不味いという点では、Visual C++ .NET 2003のバグですが、
参照ページを見ての通り、掲示されたソースコードにエラーがあります。

ちなみに、今私の手元にあるVisual Studio Orcas ベータ版でコンパイルすると
error C2371: 'CString' : redefinition; different basic types
と正しくエラーを指摘してくれます。


引用:

この場合どのように回避したらいいでしょうか??



おそらくキャスト演算子のオーバーロードをしたいのだと思いますが、
下記の1行から"class"を削除すればよいです。
コード:
swcVariantC::operator class CString ()const 

ちばじん
会議室デビュー日: 2007/08/14
投稿数: 7
投稿日時: 2007-08-14 20:52
こんばんは。
Tdnr_Symさん。お返事ありがとうございます。

引用:

おそらくキャスト演算子のオーバーロードをしたいのだと思いますが、
下記の1行から"class"を削除すればよいです。
コード:
swcVariantC::operator class CString ()const 





この方法でやったのですが他のエラーが発生してしまいます。。。

・・・さっぱりわかりません。。。


--エラー

・error C2738: 'operator ATL::CStringT<BaseType,StringTraits>' があいまいか、または 'swcVariantC' のメンバではありません。
with
[
BaseType=char,
StringTraits=StrTraitMFC_DLL<char>
]

 ・error C3861: 'GetStringData': 識別子は、引数依存の照合を使用しても見つかりません。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-08-14 21:16
こんばんは。

引用:

ちばじんさんの書き込み (2007-08-14 20:52) より:

この方法でやったのですが他のエラーが発生してしまいます。。。

・・・さっぱりわかりません。。。
--エラー

・error C2738: 'operator ATL::CStringT<BaseType,StringTraits>' があいまいか、または 'swcVariantC' のメンバではありません。
with
[
BaseType=char,
StringTraits=StrTraitMFC_DLL<char>
]

 ・error C3861: 'GetStringData': 識別子は、引数依存の照合を使用しても見つかりません。



ある程度こういう返信を想定していましたが、
やはりもう少し丁寧にフォローする必要がありますか。

掲示されたコード以外のところに、下記のようなコードもあるはずです。
探してみてください。同じように"class"を削除してください。

コード:
class swcVariantC
{
	・・・

	operator class CString ()const;		// ここも"class"は不要

	・・・
};

ちばじん
会議室デビュー日: 2007/08/14
投稿数: 7
投稿日時: 2007-08-14 21:47
こんばんは
Tdnr_Symさんお返事ありがとうございます。

引用:

ある程度こういう返信を想定していましたが、
やはりもう少し丁寧にフォローする必要がありますか。



・・・すいません。。。VC++は初心者なもので。。。


引用:

掲示されたコード以外のところに、下記のようなコードもあるはずです。
探してみてください。同じように"class"を削除してください。

コード:
class swcVariantC
{
	・・・

	operator class CString ()const;		// ここも"class"は不要

	・・・
};





ご指摘の通り、他にも上のようなところがあり、classを削除したらうまくいきました。

いろいろありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)