質問者
シングルドキュメント形式でのAsyncSocket使用によるクライアントプログラム

全般的な情報交換
-
ダイアログ形式では、以下のように基本クラスCAsyncSocketのヘッダファイル「ClientASock.h」に記述してコンパイルするとエラーは発生しませんが、
ClientAScok.h
#pragma once
class CTcpClientDlg;// CClientASock コマンド ターゲット
class CClientASock : public CAsyncSocket
{
private:
CTcpClientDlg *m_pDlg; // メインダイアログのポインタpublic:
CClientASock(); // コンストラクタ
virtual ~CClientASock(); // デストラクタ// 共有関数の宣言
BOOL Create(CTcpClientDlg *pDlg); // ソケット生成
virtual void OnConnect(int nErrorCode); // Connect通知
virtual void OnReceive(int nErrorCode); // Receive通知
virtual void OnSend(int nErrorCode); // Send通知
virtual void OnClose(int nErrorCode); // Close通知
};シングルドキュメント形式で同様にクライアントを作成しようと、基本クラスCAsyncSocketのヘッダファイル「ClientASock.h」を下記のように、
#pragma once
class CTcpClient2View;// CClientASock コマンド ターゲット
class CClientASock : public CAsyncSocket
{
private:
CTcpClient2View *m_pView; // フォームビューのポインタpublic:
CClientASock(); // コンストラクタ
virtual ~CClientASock(); // デストラクタBOOL Create(CTcpCient2View *pView); // ソケット生成
virtual void OnConnect(int nErrorCode); // Connect通知
virtual void OnReceive(int nErrorCode); // Receive通知
virtual void OnSend(int nErrorCode); // Send通知
virtual void OnClose(int nErrorCode); // Close通知
};コンパイルすると、CTcpClient2View *m_pView; 部分で構文エラーとなりmす。
シングルドキュメントで、他のクラスとリンクするにはどのようにすればよろしいでしょうか。
お教えください。
- 種類を変更済み 山本春海 2012年5月18日 8:48 自己解決されているようなので、ステータスを変更させていただきました。
すべての返信
-
具体的にどんなエラーが出ていますか?
提示されているヘッダー部分(宣言)を見る限り、ここにエラーは含まれていないように見受けられます。
エラーが出てるのは宣言ではなく、定義部ですよね?
おそらく、ビュークラス(CTcpClient2View)のヘッダーがインクルードされていないのが原因と思われます。
CClientASock のソースファイルに、CTcpClient2View のヘッダーがインクルードされているかを確認してみてください。
インクルードしていてなおエラーが出るようであれば、具体的にそのエラーの内容を記載しないと、これ以上はたぶん誰も答えられないと思いますよ。
わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
-
エラーは以下のエラーが出ています。
BOOL Create(CTcpCient2View *pView);←この行で次のエラーが発生。
clientasock.h(15) : error C2061: 構文エラー : 識別子 'CTcpCient2View'
CTcpClient2Doc* GetDocument() const;←この行で次のエラーが発生。ただし、この行は自動生成されたものです。
tcpclient2view.h(19) : error C2143: 構文エラー : ';' が '*' の前にありません。
tcpclient2view.h(19) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポー
トしていません
tcpclient2view.h(19) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポート
していません
tcpclient2view.h(19) : warning C4183: 'GetDocument': 戻り値の型がありません。'int' を返すメンバ関数とみなします。
CClientASock::CClientASock()
m_pView(NULL)←この行で次のエラーが発生。clientasock.cpp(13) : error C3646: 'm_pView' : 不明なオーバーライド指定子です
clientasock.cpp(14) : error C2448: 'CClientASock::{ctor}' : 関数の定義が間違っています。
BOOL CClientASock::Create(CTcpCient2View *pView)
{
m_pView = pView;
return CAsyncSocket::Create();
}clientasock.cpp(24) : error C2065: 'CTcpCient2View' : 定義されていない識別子です。
clientasock.cpp(24) : error C2065: 'pView' : 定義されていない識別子です。
clientasock.cpp(25) : error C2448: 'CClientASock::Create' : 関数の定義が間違っています。
以上です。
まだ開発途中です。
また、「CClientASock のソースファイルに、CTcpClient2View のヘッダーがインクルードされているかを確認してみてください」ですが、
CTcpclient2Viewのヘッダはインクルードしています。
以上、よろしくお願いいたします。
-
BOOL CClientASock::Create(CTcpCient2View *pView)
{
m_pView = pView;
return CAsyncSocket::Create();
}clientasock.cpp(24) : error C2065: 'CTcpCient2View' : 定義されていない識別子です。
clientasock.cpp(24) : error C2065: 'pView' : 定義されていない識別子です。
clientasock.cpp(25) : error C2448: 'CClientASock::Create' : 関数の定義が間違っています。
と、
BOOL Create(CTcpCient2View *pView);←この行で次のエラーが発生。
clientasock.h(15) : error C2061: 構文エラー : 識別子 'CTcpCient2View'
の部分は入力ミスでエラーが出ていました。
よろしくお願いいたします。
-
入力ミスを直したらエラー状況が変わった。。。のですよね?残りはどんなエラーですか?
GetDocument() 関係だけですか?
状況詳細が見えないので、一般的な解決策を調べるための手順を書いておきます。
まず、エラーメッセージから原因がすぐにたどり着けない場合(今回でてるエラーは、熟練の技術者でも日常的に見かけるエラーです)は、まず、エラーの詳細を知るところから入ることをお勧めします。
エラー詳細を調べるには、出力画面かエラー一覧で該当エラー行にフォーカスを当て(出力画面ならカーソルをそこに移動する)、F1キーを押します。
たいていの場合、F1キーを押せば、細かな詳細が出ます。もし、ヘルプリファレンス(MSDNライブラリ)が整備されていない場合は、まずその整備から始めてください。最低でもエラーの詳細くらいはチェックできるようにしておくことをお勧めします。エラー番号でネットを検索してもいいですが、その場合ノイズが多いので、どれが読むべきものかを抜き出すだけで疲れてしまいますので、お勧めはできません。
ちなみに、C2143 も、ヘルプリファレンスにはエラーの説明が詳しく書かれています。ちょっとわかりにくいですけどね。。。
特定のソースだけビルドできないという場合は、インクルードするヘッダーが足りないという場合が多いです。ただ、そういう状況の場合の多くは、CView* や、CWnd* を渡せばいいということもあります。
わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
-
今現在発生しているエラーは、
CTcpClient2Doc* GetDocument() const;←この行で次のエラーが発生。ただし、この行は自動生成されたものです。
tcpclient2view.h(19) : error C2143: 構文エラー : ';' が '*' の前にありません。
tcpclient2view.h(19) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポー
トしていません
tcpclient2view.h(19) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポート
していません
tcpclient2view.h(19) : warning C4183: 'GetDocument': 戻り値の型がありません。'int' を返すメンバ関数とみなします。
CClientASock::CClientASock()
m_pView(NULL)←この行で次のエラーが発生。clientasock.cpp(13) : error C3646: 'm_pView' : 不明なオーバーライド指定子です
clientasock.cpp(14) : error C2448: 'CClientASock::{ctor}' : 関数の定義が間違っています。
です。
よろしくお願いいたします。
-
CTcpClient2Doc* GetDocument() const;←この行で次のエラーが発生。ただし、この行は自動生成されたものです。
tcpclient2view.h(19) : error C2143: 構文エラー : ';' が '*' の前にありません。
tcpclient2view.h(19) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポー
トしていません
tcpclient2view.h(19) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポート
していません
tcpclient2view.h(19) : warning C4183: 'GetDocument': 戻り値の型がありません。'int' を返すメンバ関数とみなします。
のエラーはTcpClient2ViewのヘッダにTcpClient2Docのヘッダをインクルードすることにより解消しました。
また、
CClientASock::CClientASock()
m_pView(NULL)←この行で次のエラーが発生。clientasock.cpp(13) : error C3646: 'm_pView' : 不明なオーバーライド指定子です
clientasock.cpp(14) : error C2448: 'CClientASock::{ctor}' : 関数の定義が間違っています。
に関しては、
CClientASock::CClientAScok()
{
m_pView = NULL;
}
と書き直すことにより解消しました。
-
一通り解決したようですね。
ちなみに。。。
CClientASock::CClientASock() m_pView(NULL) //←この行で次のエラーが発生。 { }
は、
CClientASock::CClientASock() : m_pView(NULL) //←先頭に ':' を追加 { }
としてやることでもエラーが取れます。このあたりは、C++の基本文法部分なので、掲示板で教えを乞うよりは書籍などを読むことをお勧めします。
わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/