【问题标题】:Declaring a pointer to a class object within a class declaraion在类声明中声明指向类对象的指针
【发布时间】:2014-12-01 22:49:44
【问题描述】:

我不是一个 C++ 人,所以一些简单的事情仍然让我感到困惑。我正在使用 Qt 并试图完成我的 Qt 项目(它将用于测试我在原型板上安装的 TCP/IP 连接)。

在我的主窗口类中,我想包含指向当您在主窗口窗体上按下按钮时创建的客户端和服务器对象的指针。但是,当我将该声明放入类中时,即使我已经包含了头文件,该类似乎也不知道它是什么。

这是我的主窗口类的 sn-p:

private:
    Ui::MainWindow *ui;
    EchoServer *mServer;
    EchoClient *mClient;
...

EchoServer 和 Client 行出现语法错误,然后缺少类型说明符。

但是当我在按钮推送事件中的 mainwindow.cpp 文件中放入相同的声明时,没有错误!?这是该功能的sn-p:

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 );
    ...

任何想法,我错过了什么?

【问题讨论】:

  • 你应该在你的主窗口头文件中包含你定义你的 EchoServer 和 EchoClient 类的头文件......或者你可以转发声明你的 EchoServer 和 EchoClient 类,因为你使用指向它们的指针

标签: c++ qt


【解决方案1】:

您可以简单地在头文件中使用前向声明,例如:

class EchoServer;
class EchoClient;

class MyClass
{

private:
    Ui::MainWindow *ui;
    EchoServer *mServer;
    EchoClient *mClient;
};

【讨论】:

  • 谢谢 vahancho!那行得通....我认为它必须是一些简单的东西,但我想我仍然不明白为什么我需要它!?我在这个头文件中包含了定义这些类的头文件。我的头文件没有前向声明做什么?乔 B.
  • @JoeB.,实际上您可以平等地使用这两种方法。但是,如果是声明指针的问题,最好使用前向声明,因为编译器只需要知道您使用了正确的名称。这样做的好处是减少编译时间。
  • @JoeB。您没有碰巧在这两个标题之一中包含mainwindow.h?因为你解释的是circular dependency的症状。 This question 可以帮助您更好地理解这一点。
猜你喜欢
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多