找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 11500|回复: 11

ACE初学者问题 《ACE程序员教程》的例子

[复制链接]
发表于 2009-3-11 09:38:01 | 显示全部楼层 |阅读模式
调试《ACE程序员教程》里的第一个例子就出错了....
找不到相关的资料,求助:
F:\VISUAL C++\2_1\2_1.cpp(50) : error C2079: 'timeout' uses undefined class 'ACE_Time_Value'
F:\VISUAL C++\2_1\2_1.cpp(51) : error C2664: 'int __thiscall ACE_SOCK_Acceptor::accept(class ACE_SOCK_Stream &,class ACE_Addr *,class ACE_Time_Value *,int,int) const' : cannot convert parameter 3 from 'int *' to 'class ACE_Time_Value *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.
2_1.exe - 2 error(s), 0 warning(s)
发表于 2009-3-11 09:45:00 | 显示全部楼层
把出问题的代码贴出来吧,现在手头没有《ACE程序员教程》。
你给的信息太少了,不太好定位。
 楼主| 发表于 2009-3-11 10:07:20 | 显示全部楼层
代码:
int accept_connections ()
{
if (peer_acceptor_.get_local_addr (server_addr_) == -1)
ACE_ERROR_RETURN ((LM_ERROR,"%p\n","Error in get_local_addr"),1);
ACE_DEBUG ((LM_DEBUG,"Starting server at port %d\n",
server_addr_.get_port_number ()));
// Performs the iterative server activities.
while(1)
{
ACE_Time_Value timeout (ACE_DEFAULT_TIMEOUT);
if (peer_acceptor_.accept (new_stream_, &client_addr_, &timeout)== -1)
{
ACE_ERROR ((LM_ERROR, "%p\n", "accept"));
continue;
}
else
{
ACE_DEBUG((LM_DEBUG,
"Connection established with remote %s:%d\n",
client_addr_.get_host_name(),client_addr_.get_port_number()));
//Handle the connection

提示出错的是这两句:
ACE_Time_Value timeout (ACE_DEFAULT_TIMEOUT);
if (peer_acceptor_.accept (new_stream_, &client_addr_, &timeout)== -1)
发表于 2009-3-11 10:15:21 | 显示全部楼层
ACE_Time_Value没有被定义,
代码里包含Time_Value.h了么,
顺便问一下,没见过ACE的例子提供2_1.cpp这样的文件,
难道你是把书上的代码手动敲上去的?
书上的代码因为篇幅所限,
基本上都是不印出来需要包含的头文件的。
 楼主| 发表于 2009-3-11 10:33:24 | 显示全部楼层
问题解决了:添加“ACE/TIME_VALUE.H”就可以了

例子是《ACE程序员教程》里的代码。
是少了很多的头文件的。
“ACE环境我是按照网上的方法配置的。
然后在建立工程,在工程-设置-添加路径等。”不知道这样的方法是不是对的?
还是直接在解压的ACE包里,新建工程的?
 楼主| 发表于 2009-3-11 10:39:01 | 显示全部楼层
现在又出现这个错误了:
LINK : fatal error LNK1181: cannot open input file "aced.lib"
Error executing link.exe.

2_1.exe - 1 error(s), 0 warning(s)
我已经按照下面方法引入类库了:
“Project->settings->Link->Input: Object/library Modules加入aced.lib ,Additional Library Path中加入$ACE_ROOT\ace,如E:\ACE_wrappers\ace ”
还是出错的!!!
为什么啊?
是不是我的ACE包有错误?
发表于 2009-3-11 10:46:43 | 显示全部楼层
首先,你按照网上提供的办法把ACE编译一遍,把必要的ACEd\ACE.dll编译出来。
然后你找不到aced.lib是因为aced.lib不在你说的目录下,试着在$(ACE_ROOT)\lib里找一下。
最后,你当然需要在你自己的目录里建新工程了。
没事不要去折腾$(ACE_ROOT)目录下的东西,当然阅读源代码除外。
 楼主| 发表于 2009-3-11 10:51:33 | 显示全部楼层
上面的问题解决了。
正确的方法是:

配置ACE环境。 打开VC++6.0,选择Tools->Options->Directories 加入以下内容:
1) Executable File:E:\ACE_wrappers\bin
2) Include File:E:\ACE_wrappers
3) Library Files:E:\ACE_wrappers\lib
4) Source Files:E:\ACE_wrappers


哎...学习ACE感觉不好找资料啊
 楼主| 发表于 2009-3-11 10:54:41 | 显示全部楼层
原帖由 modern 于 2009-3-11 10:46 发表
首先,你按照网上提供的办法把ACE编译一遍,把必要的ACEd\ACE.dll编译出来。
然后你找不到aced.lib是因为aced.lib不在你说的目录下,试着在$(ACE_ROOT)\lib里找一下。
最后,你当然需要在你自己的目录里建新工程了。
没事不 ...


知道了。谢谢!!
现在是自己一个人在学,搞的很郁闷。
有时按照网上说的方法,有部分是对的,有部分很自己得到的结果不一致。弄的自己很没底!
发表于 2009-3-11 10:55:08 | 显示全部楼层
这个坛子里的有很多前人的经验与心得,
有时间的话,可以参考,
对于ACE基础的学习,我认为是足够了,
我有空的时候也在翻前人的帖子。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-23 03:30 , Processed in 0.017215 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表