
public SysInfoPanel()
{
Text = "System Information: Panel";
BackColor = SystemColors.Window;
ForeColor = SystemColors.WindowText;
AutoScroll = true;
Graphics grfx = CreateGraphics();
SizeF sizef = grfx.MeasureString(" ", Font);
cxCol = sizef.Width + SysInfoStrings.MaxLabelWidth(grfx, Font);
cySpace = Font.Height;
// Create a panel.
Panel panel = new Panel();
panel.Parent = this;
panel.Paint += new PaintEventHandler(PanelOnPaint);
panel.Location = Point.Empty;
panel.Size = new Size(
(int) Math.Ceiling(cxCol +
SysInfoStrings.MaxValueWidth(grfx, Font)),
(int) Math.Ceiling(cySpace * SysInfoStrings.Count)); //←この部分がエラー
grfx.Dispose();
}
エラー1次のメソッドまたはプロパティ間で呼び出しが不適切です: 'System.Math.Ceiling(decimal)' と 'System.Math.Ceiling(double)'
↑こういうエラーが出てコンパイルできません。visualstudioの2005から2013まで試しましたがだめでした。
書籍付属のコンパイル済みのexeファイルは正常に動くので何が間違っているやら
No.4ベストアンサー
- 回答日時:
ちなみに……
> doubleかdecimalかどっちかにする、
> オーバーロードという機能はそのどっちかを自動で推論してくれる機能?だと思ったのですが
> 明示的にしないとだめなのですね。
オーバーロードは「多重定義」のことです。
コンパイラは引数に応じて、複数あるオーバーロードのうちのどれを使うかを判断しますが、
候補を1つに絞りきれないと今回のようなエラーになります。
No.5
- 回答日時:
元問題は解決しているようですのでANo.2補足への回答です。
オーバーロードは、同名の関数から引数の型によりコンパイラが正しい関数を選択する機能です。
引数と完全に一致する型の関数がない場合は暗黙の型変換が行われますが、それによって選べる関数が複数になると、正しい関数を特定できないためコンパイラがエラーを出します。今回の質問の問題はこのケースです。
ポリモフィズムは実行時のオブジェクトの型によって実行する関数が変わる機能です。実行時のオブジェクトの型が特定できないということはないので実行時エラーはないですね。多重継承で実行できる関数が複数になる場合はコンパイルエラーでしょう。
No.3
- 回答日時:
> cxColはfloat型 SysInfoStrings.MaxValueWidth(grfx,Font));もfloat型を返します。
> decimalでもdoubleでもないのにエラーが出なかったのはなぜでしょう
型変換には「明示的な型変換(キャスト)」と「暗黙の型変換」とがあります。
intの場合、暗黙の型変換でdoubleにもdecimalにも直せます。
・int → double
int i = 10;
double d = i; //暗黙の型変換が可能なのでエラーにならない
・int → decimal
int i = 10;
decimal d = i; //暗黙の型変換が可能なのでエラーにならない
一方、floatは暗黙の型変換ではdoubleにしか直せません。
・float → double
float f = 10f;
double d = f; //暗黙の型変換が可能なのでエラーにならない
・float → decimal
float f = 10f;
decimal d = f; //暗黙の型変換はできないのでエラーになる
d = (decimal)f; //キャストすれば変換可能
そのため、コンパイラは「どっちを呼べばいいの?」と迷う必要はなくなります。
(この場合はMath.Ceiling(double)が呼ばれます)
参考URL:http://msdn.microsoft.com/ja-jp/library/y5b434w4 …
No.1
- 回答日時:
エラーの内容がよく分からない時は、エラーメッセージでGoogle検索等してみましょう。
(まぁこのエラーメッセージじゃ何のことかわかりにくいですよね……)
まず、Math.Ceilingメソッドですが、MSDNを見ると、
Math.Ceiling(decimal)
Math.Ceiling(double)
の2つのオーバーロードがあることが分かります。
http://msdn.microsoft.com/ja-jp/library/system.m …
cySpaceの型に関する記載がありませんが、int型の変数ですか?
cySpaceがint型とすると、
cySpace * SysInfoStrings.Count
の計算結果はint型になります。
しかし、int型の引数が使えるMath.Ceilingメソッドのオーバーロードはありません。
(int型の値にMath.Ceilingを使う意味はないので当然ですが)
なので、decimalかdoubleにキャストする必要があるわけですが、
int型はキャスト演算子なしでdecimalにもdoubleにも変換することができます。
そのため、コンパイラからすると、
「Math.Ceiling(decimal)とMath.Ceiling(double)のどっちを呼べばいいの?」
ということになります。
ということで、
Math.Ceiling((decimal)cySpace * SysInfoStrings.Count)
または、
Math.Ceiling((double)cySpace * SysInfoStrings.Count)
と書いて、どっちのMath.Ceilingを呼ぶかを指示してあげてください。
この回答への補足
ありがとうございます。キャストをしたらできました
Math.Ceiling()を使わないでコンパイルしてもできました。
intなのでMaty.Ceiling()を使う必要がない、doubleかdecimalかどっちかにする、
オーバーロードという機能はそのどっちかを自動で推論してくれる機能?だと思ったのですが
明示的にしないとだめなのですね。
一つちょっとした疑問が残るのですが、エラーとなっていた行の一つ上、
(int)Math.Ceiling(cxCol + SysInfoStrings.MaxValueWidth(grfx,Font));
の部分なのですが、cxColはfloat型 SysInfoStrings.MaxValueWidth(grfx,Font));もfloat型を返します。
decimalでもdoubleでもないのにエラーが出なかったのはなぜでしょう
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- VPN 何これ 1 2022/04/19 01:32
- その他(プログラミング・Web制作) ボールの動きがスムーズに動いてかつ目盛り線描画を維持するためには 4 2023/05/31 10:01
- その他(プログラミング・Web制作) Pythonでのかんたんな物理シミュレーションについての書籍 5 2023/06/02 07:37
- MySQL [XAMPP Control Panel v3.2.4] 最新ではないみたいです。何処かに? 2 2022/06/01 14:33
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
コンパイルできません。
-
適切な変換関数が存在しない???
-
Excelのエラーで困ってます。
-
C/C++のfor文?エラー
-
fortranでプログラムを実行する...
-
ユーザフォーム開くとエラーになる
-
ビルド失敗 指定されたファイ...
-
レコードセットをcloseする所で...
-
VC++でのリンクエラー [err...
-
ソースコードが同じなのにラン...
-
C言語 [fopenのエラーについて...
-
C2146を回避するにはどうしたら...
-
[デザイン]の画面でこのような...
-
visual C++ でビルドの中止がで...
-
HANDLEの宣言でのエラー
-
webページのエラー
-
VC++でboolがエラーになる
-
vbaのインポートでエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
Excelのエラーで困ってます。
-
ビルド失敗 指定されたファイ...
-
fortranでプログラムを実行する...
-
visual C++ でビルドの中止がで...
-
適切な変換関数が存在しない???
-
VB2008で定数に色の設定をした...
-
HEWを使用しているのですが、こ...
-
コンパイルできません。
-
バッチからsqlplusの接続エラー...
-
Visual Studioのstrcpy_sについて
-
DLL関数を使ったプログラム
-
キーの自動入力
-
RightとLeft関数のライブ...
-
BC30002: 型 'ListItem' が定義...
-
LPCWSTRとchar
-
error C3867 関数呼び出しには...
-
デバッグ中のエラーのことで教...
-
sys/time.hのインクルードがで...
おすすめ情報