いつもお世話になっています。GGです。
GDI+の文字表示の質問です。
以下のホームページを見ています。
http://park17.wakwak.com/~dragoon/gdiplus6.htm
…
Font myFont( LVerdana, 24.0f, style, UnitPoint );
…
コンバイルするとエラーが出ました。
error C2259: 'Font' : 抽象クラスをインスタンス化できません。
どう対処すればいいでしょうか。(エラーヘルプを見たのですが、解決できません)
よろしくお願いします。
環境:.Net(2002) MFC使用、Win2000
namespace GdiplusのFontクラスじゃなく、
別の場所にある純仮想関数をもったFontクラスのインスタンスを作ろうとして
しまってるんじゃない?
とーりすがり さん
ご回答ありがとう。
>namespace GdiplusのFontクラスじゃなく、
>別の場所にある純仮想関数をもったFontクラスのインスタンスを作ろうとして
>しまってるんじゃない?
Fontクラスのインスタンスの作り方がわかりません。
(やったことがない)
よろしくお願いします。
インスタンスを作った事が無いという事は無いはずです。
-----------
instance
━ 【名】
Ⅰ 【C】 例, 実例, 事例, 実証
New College English-Japanese Dictionary, 6th edition (C) Kenkyusha
Ltd. 1967,1994,1998
-----------
プログラミングなどでは
「型のメモリ(実体)」のことをインスタンスと呼んで、
「型のメモリ(実体)を確保」する事をインスタンス化すると呼んだりします。
「宣言」だけだと、実体を宣言しているのか、構造を宣言しているのかわからなく
なりますので…。
で、問題の件ですがとーりすがりさんが言っていることと同じで無いかと思います。
GDI+のライブラリのヘッダなどを読んでいるか、と、GDI+のFontはグローバルス
コープにおいてあるか等を確認してみてください。
汎用のライブラリが衝突しやすい名前を持ってくるときは別の名前空間に入れた
りします。
グローバルスコープ云々については、名前空間や、スコープについて調べてくださ
い。
それを理解しないとこの後も苦労すると思います。
その上で考えられる原因が、「使いたいクラスの名前を指定できていない」「別の
名前と衝突して優先度が違う」などだと判ると思います。
ぬさん、
ご回答ありがとう。
>その上で考えられる原因が、「使いたいクラスの名前を指定できていない」「別の
>名前と衝突して優先度が違う」などだと判ると思います。
一応、調べたのですが、なかなか見つかりませんでした。
書き忘れたのですが、以下のエラーメッセージもあります。
error C2661: 'Font::Font' : 2 個の引数を持つオーバーロードされた関数はありませ
ん。
Helpを見たのですが、
Font()関数をどう作るのでしょうか。
ちなみに、同じダイアローグのOnPain()に画像を表示できます。
GDI+のやり方、まだ慣れていないです、よろしくお願いします。
>error C2661: 'Font::Font' : 2 個の引数を持つオーバーロードされた関数は
ありません。
その次の近くにFontクラスを定義しているパスがありませんか?
有るならば、間違ってそちらを参照しているので、そちらを参照しないようにして下
さい。
>Font()関数をどう作るのでしょうか。
作る必要はありません。
それはコンストラクタのことです。
正しいGDI+のクラスを宣言できれば問題無いはずです。
私がGDI+を使った事が無いので検索しただけですが、貴方が参考にしたサイトに
前準備についても書いてある様です。
http://park17.wakwak.com/~dragoon/gdiplus1.htm
http://park17.wakwak.com/~dragoon/gdiplus2.htm
です。
ちゃんとやってありますか?