TCDEXCU 2014-10-25 02:06 采纳率: 0%
浏览 2072

高人来帮助下小弟,纠结到吐血的问题

先上下vs2010报错代码

1> 正在创建库 D:\Qtproject\src\Server\Debug\Server.lib 和对象 D:\Qtproject\src\Server\Debug\Server.exp
1>net_comm.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall tcp_session::write(class tcp_message *)" (?write@tcp_session@@QAEXPAVtcp_message@@@Z),该符号在函数 "private: bool __thiscall net_comm::send_msg(class tcp_message * &)" (?send_msg@net_comm@@AAE_NAAPAVtcp_message@@@Z) 中被引用
1>net_comm.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall tcp_session::close(void)" (?close@tcp_session@@QAEXXZ),该符号在函数 "protected: bool __thiscall net_comm::send_packet(class boost::shared_ptr &,class serial_packet &)" (?send_packet@net_comm@@IAE_NAAV?$shared_ptr@Vtcp_session@@@boost@@AAVserial_packet@@@Z) 中被引用
1>net_comm.obj : error LNK2019: 无法解析的外部符号 "public: bool __thiscall tcp_session::isconnected(void)" (?isconnected@tcp_session@@QAE_NXZ),该符号在函数 "protected: bool __thiscall net_comm::send_packet(class boost::shared_ptr &,class serial_packet &)" (?send_packet@net_comm@@IAE_NAAV?$shared_ptr@Vtcp_session@@@boost@@AAVserial_packet@@@Z) 中被引用
1>net_comm.obj : error LNK2019: 无法解析的外部符号 "public: class boost::asio::basic_stream_socket > & __thiscall tcp_session::socket(void)" (?socket@tcp_session@@QAEAAV?$basic_stream_socket@Vtcp@ip@asio@boost@@V?$stream_socket_service@Vtcp@ip@asio@boost@@@34@@asio@boost@@XZ),该符号在函数 "protected: bool __thiscall net_comm::send_packet(class boost::shared_ptr &,class serial_packet &)" (?send_packet@net_comm@@IAE_NAAV?$shared_ptr@Vtcp_session@@@boost@@AAVserial_packet@@@Z) 中被引用
1>ServerNetwork.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall tcp_server::tcp_server(unsigned short,class net_comm *,int)" (??0tcp_server@@QAE@GPAVnet_comm@@H@Z),该符号在函数 "class boost::shared_ptr __cdecl boost::make_shared(int &,class ServerNetwork * const &&,int &)" (??$make_shared@Vtcp_server@@AAHQAVServerNetwork@@AAH@boost@@YA?AV?$shared_ptr@Vtcp_server@@@0@AAH$$QBQAVServerNetwork@@0@Z) 中被引用
1>D:\Qtproject\src\Server\Debug\Server.exe : fatal error LNK1120: 5 个无法解析的外部命令
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========

这个错误write() close() isconnected() 我函数里都是有明确定义 为什么还是报这个错 生成的时候报的错?

  • 写回答

2条回答 默认 最新

  • TCDEXCU 2014-10-25 02:15
    关注

    这个相关的文件代码 net_comm.cpp

    #include "net_comm.hpp"
    #include
    #pragma warning(disable:4355)
    #pragma warning(disable:4996)
    #pragma comment(lib,"ws2_32.lib")
    #pragma comment( lib, "vfw32.lib" )
    net_comm::net_comm(int sec_check):
    m_req_worker(m_recvq), m_resp_worker(m_sendq)
    {
    m_req_worker.set_workerFunc(boost::bind(&net_comm::process_msg, this, _1));
    m_resp_worker.set_workerFunc(boost::bind(&net_comm::send_msg, this, _1));

    //每隔sec_check秒向会话端发送一次检测包
    m_schedule.add(boost::bind(&net_comm::check_session_status, this), sec_check);
    
    //开始
    m_schedule.start();
    

    }
    //启动工作线程
    void net_comm::start()
    {
    m_req_worker.start();
    m_resp_worker.start();
    }
    net_comm::req_queue_type &net_comm::recv_queue()
    {
    return m_recvq;
    }
    //以下两个函数是供调用的回调函数
    bool net_comm::process_msg(tcp_request_ptr &req)
    {
    msg_head *head = req->get_head();
    serial_packet *p = m_packetfactory.generate_packet(static_cast(head->type), req->msg_data(), head->size);
    if (p)
    {
    return proc_packet(req->get_session(), p);
    }
    return false;

    }

        **bool net_comm::send_msg(tcp_response_ptr &resp)
        {
            resp->set_msg_crc();
            resp->get_session()->write(resp);
            return true;
        }** 
    

    bool net_comm::session_connected(tcp_session_ptr &session)
    {
    proc_connect(session);
    return add_session(session);
    }
    bool net_comm::session_disconnected(tcp_session_ptr &session)
    {
    proc_disconnect(session);
    return remove_session(session);
    }
    bool net_comm::send_packet(tcp_session_ptr &sp, serial_packet &packet)
    {
    //每一次发包之前先检测该连接的状态
    if (!sp->socket().is_open() || !sp->isconnected())
    {
    sp->close();
    return false;
    }
    tcp_response_ptr resp = boost::factory()(sp);
    generate_session_data(resp, packet);
    m_sendq.push(resp);
    return true;
    }
    void net_comm::generate_session_data(tcp_response_ptr &resp, serial_packet &packet)
    {
    //1.构建输出流,将packet中的数据序列化至buf
    char buf[SEND_BUFFER];
    memset(buf, 0, SEND_BUFFER);
    stream sa(buf);
    text_oarchive oa(sa);
    packet.serial(oa);

    //2.构建消息头
    msg_head head;
    head.type = packet.get_packet_type();
    std::string strbuf(buf);
    
    head.size = static_cast<uint32_t>(strbuf.size());
    head.chksum = std::for_each(strbuf.begin(), strbuf.end(), crc_32_type())();
    
    //3.赋值
    resp->get_head()->chksum = head.chksum;
    resp->get_head()->size = head.size;
    resp->get_head()->type = head.type;
    
    std::copy(strbuf.begin(),
        strbuf.begin() + strbuf.size(),
        resp->msg_data().begin());
    

    }
    bool net_comm::add_session(const tcp_session_ptr &session)
    {
    //如果该会话端没有在列表中才加入
    if (!m_tcp_sessions.find(session))
    {
    m_tcp_sessions.push_back(session);
    return true;
    }
    return false;
    }
    bool net_comm::remove_session(const tcp_session_ptr &session)
    {
    return m_tcp_sessions.remove(session);
    }
    void net_comm::check_session_status()
    {

    }

    评论

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错