关于多线程通讯。急急急!!!

ILearning 2002-04-25 11:26:47
头文件main.h中包含定义
class PACKAGE TMyServerThread : public Scktcomp::TServerClientThread
{
public:
void __fastcall ClientExecute(void);
};
实现文件main.cpp中包含
void __fastcall TMyServerThread::ClientExecute()
{
while (!Terminated && ClientSocket->Connected) // make sure connection is active
{
try
{
TWinSocketStream *pStream = new TWinSocketStream(ClientSocket, 60000);
try
{
char buffer[50];
memset(buffer, 0, sizeof(buffer));
if (pStream->WaitForData(6000)) // give the client 60 seconds to start writing
{

if (pStream->Read(buffer, sizeof(buffer)) == 0)
ClientSocket->Close(); // if can't read in 60 seconds, close the connection
// now process the request
}
else
ClientSocket->Close();
}
__finally
{
delete pStream;
}
}
catch (...)
{
HandleException();
}
}
}
//------------------------------------------------------------------------
void __fastcall TfrmMain::sstMainGetThread(TObject *Sender,
TServerClientWinSocket *ClientSocket,
TServerClientThread *&SocketThread)
{
SocketThread = new TMyServerThread(false,ClientSocket);
}
报错:[C++ Error] main.cpp(301): E2125 Compiler could not generate default constructor for class 'TMyServerThread'。

望各位大虾指点.
...全文
79 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yueyue 2002-04-25
  • 打赏
  • 举报
回复
多写了一个T
class PACKAGE TMyServerThread : public Scktcomp::TServerClientThread
{
public:
TMyServerThread(bool,TServerClientWinSocket *);//constructure
void __fastcall ClientExecute(void);
};
yueyue 2002-04-25
  • 打赏
  • 举报
回复
class PACKAGE TMyServerThread : public Scktcomp::TServerClientThread
{
public:
TMyServerThread(bool,TTServerClientWinSocket *);//constructure
void __fastcall ClientExecute(void);
};
ILearning 2002-04-25
  • 打赏
  • 举报
回复
这个构造函数该怎么写呀。
我写的老是报错。
另外,c++中好像子类中如果没有构造函数会自动调用父类的构造函数。
请高手指点.
Jinglihui 2002-04-25
  • 打赏
  • 举报
回复
错了,错了,上边的话说错了!
Jinglihui 2002-04-25
  • 打赏
  • 举报
回复
还有一点我想问你呀,只要在main.h开始部分加上#include <scktcomp.hpp>
之后,你就可以在你的代码中使用TServerClientThread类了,你的代码可以写成:
void __fastcall TfrmMain::sstMainGetThread(TObject *Sender,
TServerClientWinSocket *ClientSocket,
TServerClientThread *&SocketThread)
{
SocketThread = new TServerClientThread(false,ClientSocket);
}
也是可以的,你是出于什么目的来派生一个新类呢?
Jinglihui 2002-04-25
  • 打赏
  • 举报
回复
他说不能创建默认的构造函数,那你给TMyServerThread添写一个构造函数试试
ILearning 2002-04-25
  • 打赏
  • 举报
回复
SocketThread = new TMyServerThread(false,ClientSocket);
这句报错.

ILearning 2002-04-25
  • 打赏
  • 举报
回复
已通过.
多谢各位!!!
特别是风色幻想.
charlie_tang 2002-04-25
  • 打赏
  • 举报
回复
IDE工具再怎么好,基础的东西还是要看看的。
yueyue 2002-04-25
  • 打赏
  • 举报
回复
C++编程思想:
当创建一个对象时,必须保证编译器调用所有子对象的构造函数。到目前为止,例子中的所有
子对象都有缺省的构造函数,编译器可以自动调用它们。但是,如果子对象没有缺省构造函数
或如果我们想改变某个构造函数的缺省参数,情况会怎么样呢?这是一个问题,因为这个新类
的构造函数不能保证访问它的子对象的p r i v a t e数据成员,所以不能直接地对它们初始化。
解决办法很简单:对于子对象调用构造函数, C + +为此提供了专门的语法,即构造函数的
初始化表达式表。构造函数的初始化表达式表的形式模仿继承活动。对于继承,我们在冒号之
后和这个类体的左括号之前放置基类。而在构造函数的初始化表达式表中,我们可以将对子对
象构造函数的调用语句放在构造函数参数表和冒号之后,在函数体的开括号之前。对于从b a r
继承来的类f o o,如果bar 有一个取单个i n t参数的构造函数,则表示为
foo::foo(int i) : bar(i) { //...
yueyue 2002-04-25
  • 打赏
  • 举报
回复
我编译通过的:

unit1.cpp:

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)
TMyServerThread::TMyServerThread(bool bSuspended,Scktcomp::TServerClientWinSocket *SCWSocket):TServerClientThread(bSuspended,SCWSocket)
{
//..
}
unit.h:
#ifndef Unit1H
#define Unit1H
#include <scktcomp.hpp>
//---------------------------------------------------------------------------
class PACKAGE TMyServerThread : public Scktcomp::TServerClientThread
{
public:
TMyServerThread(bool,TServerClientWinSocket *);//constructure
//void __fastcall ClientExecute(void);
};


#endif
ILearning 2002-04-25
  • 打赏
  • 举报
回复
各位大虾救命啊!!!
ILearning 2002-04-25
  • 打赏
  • 举报
回复
__fastcall TServerClientThread(bool CreateSuspended, TServerClientWinSocket* ASocket);

这是基类TServerClientThread的构造函数声明,参数是对的.
ILearning 2002-04-25
  • 打赏
  • 举报
回复
//------------------------------------------------------------------
__fastcall TMyServerThread::TMyServerThread(bool CreateSuspended, TServerClientWinSocket* ASocket)
{// 这里出错

}
我加了上面的代码。
编译出错:[C++ Error] main.cpp(298): E2251 Cannot find default constructor to initialize base class 'TServerClientThread'
ITBUG 2002-04-25
  • 打赏
  • 举报
回复
NEW 的时候线程函数的参数个数是否一致???
yueyue 2002-04-25
  • 打赏
  • 举报
回复
如果还不对,就要祭出源码了!
yueyue 2002-04-25
  • 打赏
  • 举报
回复
你没有这个constructure的实现啊。
在main.cpp中加入:
TMyServerThread::TMyServerThread(bool bSuspended,Scktcomp::TServerClientWinSocket *SCWSocket)
{
//..
}
ILearning 2002-04-25
  • 打赏
  • 举报
回复
风色幻想
照你这么写会编译出错:
[Linker Error] Unresolved external 'TMyServerThread::' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER5\PROJECTS\SOCKET2\MAIN.OBJ
[Linker Error] Unresolved external 'TMyServerThread::TMyServerThread(bool, Scktcomp::TServerClientWinSocket *)' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER5\PROJECTS\SOCKET2\MAIN.OBJ

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧