***View.h をインクルードできません。 – プログラミング – Home

***View.h をインクルードでき...
 
通知
すべてクリア

[解決済] ***View.h をインクルードできません。


H.H
 H.H
(@H.H)
ゲスト
結合: 17年前
投稿: 6
Topic starter  

VC++6.0 MFC SDI
基本クラス CFormView

通信を行うクラスを作成し、通信で受信したデータを
画面に表示したいのですが、どうしたら出来るのか悩んでいます。

①表示方法は解ります。データはちゃんと受信しています。

②通信は、断続的に送られてくるデータをマルチスレッドで受信します。
 受信する度に、画面(エディットボックス)に表示させたいと思っています。

③RS_232CView.h で、エディットボックスの表示とか行うのですが、
 通信を行うクラスで、#include RS_232CView.hとするとエラーに
 なってしまい、受信したデータをエディットボックスが使えるRS_232CView
 クラスに送る方法がわかりません。

よろしくお願いします。


引用未解決
トピックタグ
とおりすがり
 とおりすがり
(@とおりすがり)
ゲスト
結合: 23年前
投稿: 180
 

エラーメッセージがわからないと回答できない。常考(ry
コンパイルエラー?
実行時エラー?


返信引用
H.H
 H.H
(@H.H)
ゲスト
結合: 17年前
投稿: 6
Topic starter  

とおりすがりさんありがとうございます。

エラーはコンパイルエラーです。

エラーメッセージは以下の通りです。
RS_232CView.h:
error C2065: 'IDD_RS_232C_FORM' : 定義されていない識別子です。
error C2057: 定数式が必要です。
error C2143: 構文エラー : ';' が '*' の前に必要です。
error C2501: 'CRS_232CDoc' : 識別名を宣言するのに、型が指定されていません。
error C2501: 'GetDocument' : 識別名を宣言するのに、型が指定されていません。

試しに、test.cppと言うファイルを作り、
この2行だけ書いた場合でも同じエラーメッセージがでます。
#include stdafx.h
#include RS_232CView.h

RS_232CView.hは自動生成されたままの状態で、
何も追記していません。

class CRS_232CView : public CFormView
{
protected: // シリアライズ機能のみから作成します。
CRS_232CView();
DECLARE_DYNCREATE(CRS_232CView)

public:
//{{AFX_DATA(CRS_232CView)
enum{ IDD = IDD_RS_232C_FORM };
// メモ: ClassWizard によってこの位置にデータ メンバが追加されます。
//}}AFX_DATA

// アトリビュート
public:
CRS_232CDoc* GetDocument();


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

RS_232CView.cppの

>#include RS_232CView.h

より上に#includeしているヘッダファイルがありませんか?


返信引用
とおりすがり
 とおりすがり
(@とおりすがり)
ゲスト
結合: 23年前
投稿: 180
 

>error C2065: 'IDD_RS_232C_FORM' : 定義されていない識別子です。
推測ですが、そのViewは別のプロジェクトからコピーしてきた
クラスだったりしませんか?

その場合は新しいものに合わせてDocumentを取得するならそのようにする
必要がありますし
リソースの*.h *.rc ファイルを手動で修正・追加しなければなりません。


返信引用
H.H
 H.H
(@H.H)
ゲスト
結合: 17年前
投稿: 6
Topic starter  

Blueさん、とおりすがりさんありがとうございます。

>RS_232CView.cppの

>>#include RS_232CView.h

>より上に#includeしているヘッダファイルがありませんか?

RS_232CView.cppは自動で生成されたままの状態で、
このように書かれています。

#include stdafx.h
#include RS_232C.h

#include RS_232CDoc.h
#include RS_232CView.h

>error C2065: 'IDD_RS_232C_FORM' : 定義されていない識別子です。
自動生成されたままで、ただこのRS_232CView.hを
自作のファイルでインクルードするとコンパイルエラーになります。
コメントにするとエラー0になります。

やった事は、VC++6.0で、
MFC Appwizard(exe) で、
作成するアプリケーションを、MDI ⇒ SDI に変更。
基本クラスを、CView ⇒ CFormView に変更。
OKしました。 
これでダイアログに、IDD_RS_232C_FORM が自動で作られていました。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>#include stdafx.h
>#include RS_232C.h
>
>#include RS_232CDoc.h
>#include RS_232CView.h
より

RS_232CView.h では
・stdafx.h
・RS_232C.h
・RS_232CDoc.h
があるものとして扱われる。
(#include ~.hをファイルに記述されているテキストすべてが展開されている
と考えればすぐわかると思います。)

よって、自作ファイル test.cpp でも

#include stdafx.h
#include RS_232C.h

#include RS_232CDoc.h
#include RS_232CView.h

とすればうまくいくのではないでしょうか?


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

基本的にスレッドを跨いでウインドウクラスの操作をするのは
Microsoftが公式にしないようにと書いていますので
受信スレッドにViewクラスのヘッダを書く必要は無いような気がします。
ViewクラスのHWNDだけをスレッドに渡すようにして
ユーザー定義メッセージとかでやり取りするようにする方が
良いと思いますよ。
スレッドが直接エディットボックスの更新をするのではなくて
Viewに対して更新を依頼するようにしてエディットボックスの更新は
Viewがやるようにした方が良いと思います。


返信引用
H.H
 H.H
(@H.H)
ゲスト
結合: 17年前
投稿: 6
Topic starter  

Blueさんのありがとうございます。

コンパイル通りました!!
とても勉強になりました。

これから表示させる為のコード書いてみます。
とりあえず見通しがたったので、
解決とします。

本当にありがとうございました。


返信引用
x
 x
(@x)
ゲスト
結合: 22年前
投稿: 7
 

H.H氏の2回目の質問でresource.hをインクルードしてないことが分かるのに
なんでこんなに回りくどい回答を?

「resource.hが足らない。resource.hをインクルードしてるxxx.hをインクルードすれ
ば?」
の一言で済むのに・・・


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました