QT CPP里面怎么跨类调用对象方法?

CheneyLiSir 2014-11-25 06:11:33
同一个项目里两个不同的类a和b

a.h和a.cpp里 声明和定义 了一个QtcpSocket *client;
在a.cpp里可以调用client->write(data);来发送数据。

在b.h和b.cpp里,include了 a.h。
b.cpp里也写client->write(data);
编辑时没红线提示错误。编译就提示未声明的引用:undefined reference to client
b.h写不写extern QtcpSocket *client;都一样不行

怎么解决?
...全文
1004 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
CheneyLiSir 2014-11-26
  • 打赏
  • 举报
回复
引用 2 楼 luotuo44 的回复:
是不是在a.cpp文件中,定义QtcpSocket *client;时,加了static修饰符
看3楼,我描述得更仔细了点
CheneyLiSir 2014-11-26
  • 打赏
  • 举报
回复
引用 2 楼 luotuo44 的回复:
是不是在a.cpp文件中,定义QtcpSocket *client;时,加了static修饰符
试过不加,调用不了,加了也报错。不同的错。加了部分代码,您有空再看看?着急ing
CheneyLiSir 2014-11-26
  • 打赏
  • 举报
回复
引用 1 楼 sniffer12345 的回复:
上代码吧 另外注意#ifndef的宏,还有看看b.cpp有没有加进编译列表
这个项目里有两个类:conn、A,对应各有conn.h、conn.cpp、A.h、A.cpp四个文件 在main.cpp里主要写了 conn *c=new conn(); A *a=new A(); A.show();//显示A类的界面

//conn.h
class conn{
public:
QTcpSocket *client;
void sendtoserver(QString s);
}

//conn.cpp
conn::conn()
{
        client = new QTcpSocket();
        client->connectToHost(QHostAddress("127.0.0.1"), 6666);//与服务端程序通过socket连接
}

void conn::sendtoserver(QString s){
     client->write(s.toLatin1());
}
怎么在A类以及我以后会加上的B、C、D各种不同类里都直接调用conn类的sendtoserver(QString s)方法?(conn里连接服务器的代码只能执行一次,不能在其他类里再执行连接服务器的代码了,多次连接服务器会报错) 通过conn::sendtoserver("aaa"); 或者在在A.h声明了conn *c; 然后在A.cpp里c.sendtoserver(“aaa”);都会报错,未声明的引用等等
luotuo44 2014-11-25
  • 打赏
  • 举报
回复
是不是在a.cpp文件中,定义QtcpSocket *client;时,加了static修饰符
sniffer12345 2014-11-25
  • 打赏
  • 举报
回复
上代码吧 另外注意#ifndef的宏,还有看看b.cpp有没有加进编译列表

64,654

社区成员

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

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