gpt4 book ai didi

c++ - 在命名空间中定义类的方法

转载 作者:太空狗 更新时间:2023-10-29 19:48:52 24 4
gpt4 key购买 nike

我在头文件的命名空间中定义了一个类,如下所示

#ifndef _c1_
#define _c1_

namespace classspace
{
class Aclass;
}

class Aclass
{
//body
};

#endif _c1_

我将此 header 添加到 main.cpp 并在 main() 中创建了一个对象,但它返回的错误是 undefined class 'classspace::Aclass'这是我的主要

void main()
{
classspace::Aclass b;
}

当我将类定义为

class classspace::Aclass
{
//body
};

错误已解决。我使用第一种方法在 Qt 主窗口文件中看到:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

运行正常,没有任何错误。我在第一种方法中的错误是什么?

最佳答案

类定义必须在您声明该类的同一个命名空间中。

至于 Qt 示例,在命名空间之外声明的 MainWindow 不是同一个类

它使用 Pimpl idiom .在命名空间中声明的 MainWindow 类用作在外部声明的 MainWindow 类中的成员,并使用其命名空间进行限定:

Ui::MainWindow* ui;

此类的定义放在其他地方(在不同的 .cpp 文件中),它应该在 Ui 命名空间中,或者定义以命名空间为前缀。

关于c++ - 在命名空间中定义类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16691749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com