请问如下c++代码为什么编 译不过?

xuemei19840118 2009-04-21 01:48:25
// Simple TCP/IP Server.

#include "stdafx.h"

#using <mscorlib.dll>

using namespace System;
using namespace System::Net;
using namespace System::Net::Sockets;
using namespace System::Threading;
using namespace System::IO;

#define HOSTNAME S"localhost"
#define PORT 9000

public __gc class Worker
{
private:

TcpClient *client_socket;

void service(StreamReader *reader, StreamWriter *writer)
{
Console::WriteLine(reader->ReadLine());
writer->WriteLine("Response");
writer->Flush();
}

void service(Stream *stream)
{
StreamReader *reader = NULL;
StreamWriter *writer = NULL;

try
{
reader = new StreamReader(stream);
writer = new StreamWriter(stream);

service(reader, writer);
}
__finally
{
try
{
if(reader != NULL)
{
reader->Close();
}
}
__finally
{
if(writer != NULL)
{
writer->Close();
}
}
}
}

void service(TcpClient *client_socket)
{
Stream *stream = client_socket->GetStream();

try
{
service(stream);
}
__finally
{
stream->Close();
}
}

void run()
{
try
{
Console::WriteLine("Worker started.");

service(client_socket);
}
__finally
{
Console::WriteLine("Worker stopped.");

client_socket->Close();
}
}

public:

Worker(TcpClient *client_socket)
{
this->client_socket = client_socket;

Thread *thread = new Thread(new ThreadStart(this, run));
thread->Start();
}
};

public __gc class Server
{
private:
IPAddress *address;
int port;

void run()
{
TcpListener *server_socket = new TcpListener(address, port);

try
{
server_socket->Start();

Console::WriteLine("Server started.");

while(true)
{
new Worker(server_socket->AcceptTcpClient());
}
}
__finally
{
Console::WriteLine("Server stopped.");

server_socket->Stop();
}
}

void init(IPAddress *address, int port)
{
this->address = address;
this->port = port;

Thread *thread = new Thread(new ThreadStart(this, run));
thread->Start();
}

public:

Server(IPAddress *address, int port)
{
init(address, port);
}

Server(String *hostname, int port)
{
init(Dns::Resolve(hostname)->AddressList[0], port);
}
};

int _tmain(int argc, char* argv[])
{
String *hostname;
int port;

if(argc == 1)
{
hostname = HOSTNAME;
port = PORT;
}
else if(argc == 2)
{
hostname = argv[1];
port = PORT;
}
else
{
hostname = argv[1];
port = Int32::Parse(argv[2]);
}

new Server(hostname, port);

return 0;
}


我用vs2005编译的,会有如下错误:

1>.\tServer.cpp(96) : error C3867: “Worker::run”: 函数调用缺少参数列表;请使用“&Worker::run”创建指向成员的指针
1>.\tServer.cpp(96) : error C3350: “System::Threading::ThreadStart”: 委托构造函数需要 2 个参数
1>.\tServer.cpp(135) : error C3867: “Server::run”: 函数调用缺少参数列表;请使用“&Server::run”创建指向成员的指针
1>.\tServer.cpp(135) : error C3350: “System::Threading::ThreadStart”: 委托构造函数需要 2 个参数

是不是我的托管环境没有设置?我应该怎么设置环境能编译通过?
...全文
164 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cunyan_0519 2011-10-31
  • 打赏
  • 举报
回复
把Worker::run换成&Worker::run就对了。
cunyan_0519 2011-10-31
  • 打赏
  • 举报
回复
error C3350: “System::Threading::ThreadStart”: 委托构造函数需要 2 个参数 同样 的问题???
liubuweiright 2009-04-21
  • 打赏
  • 举报
回复
托管吗??

帮顶...
rainbow_free 2009-04-21
  • 打赏
  • 举报
回复
帮顶下!
  • 打赏
  • 举报
回复
帮顶下
buyan2009 2009-04-21
  • 打赏
  • 举报
回复
up
priest334 2009-04-21
  • 打赏
  • 举报
回复
作为参数的函数run定义加上static关键字试试,至于ThreadStart这个调用,建议看下MSDN
对CLI我没有涉及过,希望能给你些提示
xuemei19840118 2009-04-21
  • 打赏
  • 举报
回复
是c++/CLI编程。c++的扩展,我不知道为什么编译不过
xuemei19840118 2009-04-21
  • 打赏
  • 举报
回复
是c++/CLI编程。c++的扩展,我 不懂为什么编译不过
mengde007 2009-04-21
  • 打赏
  • 举报
回复
貌似楼主发错了区了吧;建议到C#;
smaltdd 2009-04-21
  • 打赏
  • 举报
回复
貌似不是纯c++

应该是调用了C#吧

C#不懂,帮顶!

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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