找回密码
 立即注册
收起左侧

槽函数中使用普通函数

4
回复
6106
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2014-8-28 16:51:12 显示全部楼层 |阅读模式
1Qter豆
大家好,我是Qter新手。
我的目的:在串口读取数据槽函数中,迅速对获得的数据进行解码。
槽函数:on_readportbuf;//**信号为readyRead
解码函数:AnalysizePortdata;
两个函数在.h文件中进行声明,并在.cpp文件中进行定义。但是编译显示存在无法解析的符号,原因为解码函数没有识别,如果把槽函数内的解码部分代码注释掉,则编译执行均无问题,请问这是什么问题。
部分代码:.h文件中
private slots:
//**读取端口数据
        void on_readportbuf();

public:
        //**对接收数据进行解析
        void AnalysizePortdata(QByteArray buf, int*& portresult);


.cpp文件中
void WoodScan:n_readportbuf()
{
        //**这个判断尤为重要,否则的话,直接延时再接受数据,空闲时会出现高内存占用
        //**内容2个字节,报文头2个字节,校验码和终止符各一个字节 = 6个字节。       
        if (myport->bytesAvailable()>4)   
        {
                return;
        }
        //**保证接受一条完整的数据,而不是脱节的
        myHelper::Sleep(80);
        //**接受到的数据是ascii码的16进制数
        QByteArray databuf;
        databuf = myport->readAll();
        //**进行解析
        resultbuf = new int[2];
        AnalysizePortdata(databuf, resultbuf);

        //**转字符串
        QString str_data = QString::number(resultbuf[0])+QString::number(resultbuf[1]);
}

//**对收到的数据进行解析
void AnalysizePortdata(QByteArray buf, int*& portresult)
{
        int bufles = buf.size();
        if (bufles<=4)
        {
                for (int i=0; i<2; i++)//**初始化,防止数据无穷大,只包含两个字节
                {
                        portresult[i] = -1;
                }
                return;
        }
        else
        {
                for (int i=0 ;i<2; i++)
                {
                        char tp_c = buf.at(i+2);
                        portresult[i] = atoi(&tp_c);
                }
        }
}

报错:error LNK2019: 无法解析的外部符号 "public: void __thiscall WoodScan::AnalysizePortdata(class QByteArray,int * &)" (?AnalysizePortdata@WoodScan@@QAEXVQByteArray@@AAPAH@Z),该符号在函数 "private: void __thiscall WoodScan:n_readportbuf(void)" (?on_readportbuf@WoodScan@@AAEXXZ) 中被引用1>F:\S7200\WoodScanSystem\Win32\Debug\\WoodScanSystem.exe : fatal error LNK1120: 1 个无法解析的外部命令

最佳答案

查看完整内容

你是不是写错了,应该是下面这样吧 void WoodScan:AnalysizePortdata(QByteArray buf, int*& portresult)
回复

使用道具 举报

尚未签到

2014-8-28 16:51:13 显示全部楼层
你是不是写错了,应该是下面这样吧

void WoodScan:AnalysizePortdata(QByteArray buf, int*& portresult)  
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2014-8-28 18:12:52 显示全部楼层
我想问一下,为什么呢,我声明了的
回复

使用道具 举报

累计签到:595 天
连续签到:1 天
2014-8-29 08:58:45 显示全部楼层
顶楼上+1,函数定义写错了吧。
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2014-8-29 10:11:16 显示全部楼层
哎,太粗心了,谢谢二位!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了