適切な変換関数が存在しない???

このQ&Aのポイント
  • C++の構造体で困っています
  • 印刷領域のカレントポジションを原点に戻すとともに、それ以前のカレントポジションを知ろうと思い以下のようなプログラムを書きました
  • MyPoint.xとMyPoint.y には9999ではなく、現在のカレントポジションが入るという単純なものです。
回答を見る
  • ベストアンサー

適切な変換関数が存在しない???

C++の構造体で困っています 印刷領域のカレントポジションを原点に戻すとともに、それ以前のカレントポジションを知ろうと思い以下のようなプログラムを書きました typedef struct {       int x;       int y; }POINT ; POINT MyPoint; MyPoint.x = 9999; MyPoint.y = 9999; bool rtn = MoveToEx(hdc, 0, 0, MyPoint);  ・・・・・(1) MyPoint.xとMyPoint.y には9999ではなく、現在のカレントポジションが入るという単純なものです ところが(1)のMyPointで以下のような文法エラーが発生します ERROR "POINT"から"LPPOINT"への適切な変換関数が存在しません 色々調べましたらC++のコンパイラの設定に関連するエラーらしいです この辺りのことは不勉強で困っております どのように対処すれば良いかご指導願います

質問者が選んだベストアンサー

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

> 色々調べましたらC++のコンパイラの設定に関連するエラーらしいです 違います。関数の呼び出し方が間違っていることを表すエラーです。 Windows 関連の C/C++ で LP~ で始まる型を見たら ~ 型のポインタを意味するものと考えてまず間違いないです。今回の場合は POINT 型のポインタを要求されているところに POINT 型そのものを渡しているために問題のエラーが発生しています。 したがって、今回の場合は bool rtn = MoveToEx(hdc, 0, 0, &MyPoint); としてやれば OK ……とはなりません。このコード片にはそれ以外の問題があるからです。 (1)なぜ POINT 型を自分で定義しているのでしょうか? この関数が要求しているのは windef.h で定義されている POINT 構造体のはずで、この関数を使用するために windows.h をインクルードしていれば使えるはずです。 http://msdn.microsoft.com/ja-jp/library/8kk2sy33.aspx (2)この関数の戻り値の型は C++ の bool 型ではなく Windows SDK で定義されている BOOL 型です。実験してみたところ VC++ では問題なく変換できるようですが、型は合わせたほうが安心でしょう。

sato-may
質問者

お礼

ありがとうございます 良くわかりました  ・・・・・ と思います テストしてみたらOKでした お世話になりました

その他の回答 (1)

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

BOOL MoveToEx( HDC hdc, // デバイスコンテキストのハンドル int X, // 新しい現在の位置の x 座標 int Y, // 新しい現在の位置の y 座標 LPPOINT lpPoint // それまでの現在の位置 ); http://msdn.microsoft.com/ja-jp/library/cc410478.aspx という定義ですから、 bool rtn = MoveToEx(hdc, 0, 0, MyPoint); 第4パラメーターはMyPoint(POINT型)ではなく、LPPOINTでなければなりません。

sato-may
質問者

お礼

ありがとうございます LPLPOINTに致しました うまくいきました ありがとうございました

関連するQ&A

  • ヘッダファイルと構造体

    typedef struct{ float x; float y; float z; }Point; typedef struct { struct Point p1; struct Point p2; }Rect; とヘッダファイルに入力しコンパイルしてみると struct Point p1; struct Point p2; のPointが未定義の構造体とエラーが出ます。 どのように書けばいいのでしょう??

  • C#にて別クラスの関数を使いたい

    C#にて、別クラスの関数を使用する方法を教えてほしいです。 下記のような、構造体を受け取るメソッドを作りました。 ***************************** private struct MyPoint { public int x; public int y; } private void proc1(MyPoint pt) { MessageBox.Show("座標:" ; pt.x + "," + pt.y + "実行結果"); } private void button1_Click(object sender ,System.EventArgs e) { MyPoint pt; pt.x = 10; pt.y = 20; proc(pt); } ***************************** 別のフォームのクラスから、proc1を呼び出したいのですが、やり方がわかりません。 どうか、教えてください。

  • 構造体の要素すべてに対する四則演算の方法を教えてください.

    構造体の要素すべてに対する四則演算の方法を教えてください. たとえば、 2点a,bの座標成分x,y,zをそれぞれの座標ごとに足す方法を教えてください. 下のようにx,y,z成分を持ったa,bがあります。 struct point{ int x; int y; int z; }; struct point a; struct point b; struct point c; この場合, c=a+b; と書くことができず, それぞれの成分ごとに以下のように足さなくてはなりません. c.x=a.x+b.x; c.y=a.y+b.y; c.z=a.z+b.z; この方法でできるのですが, 非常に効率的でないのでなにかもっと簡単に記述する方法を教えてください. お願いいたします.

  • プログラミング 構造体に関する質問です

    4人を個別で平均点を求めるプログラミングを作りたいのですが外部関数にする方法がいまいちわかりません。あとこのプログラムもなぜかエラーがでてしまいます。どなたかご教授お願いします #include<stdio.h> typedef struct{ char name[4]; int point[4]; }tokutenn; int main(void) { int x, y; int sum[5] = {0}; double ave[5] = {0.0}; tokutenn sd[5] = {{"kou", {55, 44, 33,34}}, {"mei", {34, 74, 67,56}}, {"sai", {72, 36, 68,35}}, {"kai",{34, 82, 73,56}}, for(x = 0; x < 4; x++){ for(y = 0; y < 3; y++){ sum[x] += sd[x].point[y]; } } for(y = 0; y < 4; y++){ ave[y] = sum[y] / 3.0; } for(y = 0; y < 4; y++){ printf( "%sの平均は%.10f点\n",&sd[y].name[0], ave[y]); } return 0; }

  • C++のことで・・教えてください。

    下記のプログラムはコンパイルはできますが、実行するとエラーとなり強制終了させられてしまいます。いつたいなぜなのでしょうか? #include<iostream.h> struct point{ int x; int y; }; struct pairpoint{ point so; point si; }; pairpoint* h = (pairpoint*)malloc(1); int main(){ h[0].so.x = 1;h[0].so.y = 3; h[0].si.x = 5;h[0].si.y = 7; cout << h[0].so.x << "," << h[0].so.y << endl; cout << h[0].si.x << "," << h[0].si.y << endl; }

  • 配列の初期化

    昨日書いたコードを今日ビルドして実行したところ、 以下のように初期化した配列に値が代入されなくなりました。 どうも初期化前に戻っているような感じです。 y = 0; x = 6; int point_y[20] = { 0 }; int point_x[20] = { 0 }; c = 0; point_y[c] = y; point_x[c] = x; c = c + 1; この時点で point_y[0] には0, point_x[0]には6が入ってほしいのですが point_y[c]にカーソルを当てて中身を見ると point_y[0] = 11372064; point_y[1] = 1742984488; といった具体です。point_x[c]の中身も同じような感じです。 何が原因か悩んでいます。 もしアドバイスいただけると助かります。 どうぞよろしくお願い致します。

  • 関数から構造体を返す一般的な手法は

    たとえば下のような平面上の点を表す構造体があって、 typedef struct { const int x; const int y; } Point; 2点間の中心を計算する関数を書くとします。 この場合、計算結果をどのように返せばよいでしょうか。 「ただ動けばよい」コードを書くことはできるのですが、 私が知りたいのは、どのような書き方が一般的かということです。 構造体の要素が const なので、 下のコードはコンパイルできません。 void center(Point* result, Point* p1, Point* p2) {  result->x = (p1->x + p2->x) / 2;  result->y = (p1->y + p2->y) / 2; } 新しいオブジェクトを作ってコピーする? void center(Point* result, Point* p1, Point* p2) {  Point p = { (p1->x + p2->x) / 2, (p1->y + p2->y) / 2 };  memcpy(result, &p, sizeof(Point)); } この例のような小さい構造体であれば、 オブジェクトをまるごとリターンしてもよい? Point center(Point* p1, Point* p2) {  Point p = { (p1->x + p2->x) / 2, (p1->y + p2->y) / 2 };  return p; } あるいは、そもそも構造体の要素を const にする手法は C言語では一般的でないのでしょうか? どうかご教授願います。

  • C言語:構造体、自作関数についての質問

    こんばんは C言語の問題を提示されてなんとか作成していますが構造体と自作関数の変数の値を返したりするのが上手くいきません。 問題 「(1)x座標およびy座標のペアとして構成される構造体pointを定義せよ(両座標は整数であるとする)  (2)x座標およびy座標のメンバに値を設定し、その構造体を返す関数  struct point pointof(int a,int b){………}を作成せよ。  (3)二つの座標a,b間の距離を計算する関数  double distanceod(struct point a,struct point b); を作成せよ。  ※sqrt関数を使用せよ」 という問題です。メンバについてもいまいちよくわかりません。 どこでintを使うのか、またmainに値を返すやり方も上手くいかずコマンドプロンプトにはねられてばかりです。 どなたか解説おねがいしますm(_ _)m

  • メンバ関数のオーバーロード

    #include <iostream> using namespace std; class Point{ private: int x; int y; public: Point(int a=0, int b=0){x=a; y=b;} Point operator+(Point p); }; Point Point::operator+(Point p) { Point tmp; tmp.x = x + p.x; //この部分    tmp.y = y + p.y; return tmp; } int main() { Point p1(1, 2); Point P2(3, 6); p1 = p1 + p2; } ------------- のtmp.x = x + p.x;がなぜこうなるのか解りません。 p1 + p2;をするための前処理?なのは解るのですが。

  • プログラム終了時にエラーが発生する

    現在作成中のプログラムは終了する時にアクセス違反が発生しましたと 表示されます。 以前はこの様なことはなかったのですが構造体に変数を追加した直後に起こるようになりました。 typedef struct _A{ int x,y; int cost; vector<int> To; vector<int> E_cost; }A_t; typedef struct _B{ double x,y; int sex; char Name[20]; vector<int> root; vector<A_t> Map; //このMapという変数を追加するとエラーがでる。 }B_t; この変数を消すとエラーが出ることはありません。 まだこの変数は追加しただけで使っていません。終了時にのみ発生します。

専門家に質問してみよう