在类声明中声明指向类对象的指针 我不是C++的人,所以一些简单的事情仍然让我感到不安。我正在使用Qt,并试图完成我的Qt项目(它将用于测试我在原型板上安装的TCP/IP连接)
在我的mainwindow类中,我希望包含指向在按下主窗口窗体上的按钮时创建的客户端和服务器对象的指针。但是,当我将该声明放在类中时,它看起来并不像类知道它是什么,即使我已经包含了头文件 下面是我的mainwindow类的一个片段:在类声明中声明指向类对象的指针 我不是C++的人,所以一些简单的事情仍然让我感到不安。我正在使用Qt,并试图完成我的Qt项目(它将用于测试我在原型板上安装的TCP/IP连接),c++,qt,C++,Qt,在我的mainwindow类中,我希望包含指向在按下主窗口窗体上的按钮时创建的客户端和服务器对象的指针。但是,当我将该声明放在类中时,它看起来并不像类知道它是什么,即使我已经包含了头文件 下面是我的mainwindow类的一个片段: private: Ui::MainWindow *ui; EchoServer *mServer; EchoClient *mClient; ... EchoServer和客户端行出现语法错误,然后缺少类型说明符 但是,当我在按钮按下事件的
private:
Ui::MainWindow *ui;
EchoServer *mServer;
EchoClient *mClient;
...
EchoServer和客户端行出现语法错误,然后缺少类型说明符
但是,当我在按钮按下事件的mainwindow.cpp文件中放入相同的声明时,没有错误!?下面是该函数的一个片段:
void MainWindow::on_pushButtonConnect_clicked()
{
const ushort port = 9999;
EchoServer *mServer;
EchoServer server((const QString)ui->lineEdit_IP_Addr->text(), port, ui );
EchoClient client((const QString)ui->lineEdit_IP_Addr->text(), port, ui );
...
你知道我遗漏了什么吗?你只需在头文件中使用转发声明,如下所示:
class EchoServer;
class EchoClient;
class MyClass
{
private:
Ui::MainWindow *ui;
EchoServer *mServer;
EchoClient *mClient;
};
您应该在主窗口头文件中包含定义EchoServer和EchoClient类的头文件。。。或者您可以向前声明EchoServer和EchoClient类,因为您使用指向它们的指针感谢vahancho!这很有效……我想它必须是简单的,但我想我还是不明白为什么我需要它!?我在这个头文件中包含了定义这些类的头文件。转发声明做了哪些我的头文件没有做的事情?Joe B.@JoeB.,实际上你可以平等地使用这两种方法。然而,如果是声明指针的问题,最好使用正向声明,因为编译器只需要知道您使用了正确的名称。如果这样做的好处是减少编译时间,那么这就是一个问题。@JoeB。您没有在这两个标题之一中包含
mainwindow.h
?因为你所解释的是一种症状。可以帮助您更好地理解这一点。