【问题标题】:C++ Member class declaration in one file. Implementation in another一个文件中的 C++ 成员类声明。在另一个实现
【发布时间】:2014-11-13 16:56:41
【问题描述】:

我想知道我将在下面解释的过程是否被视为标准 c++ 98。

事实上,我有一个 A 类,它有一个名为 B 的私有成员类。为了使所有内容更易于阅读和更合乎逻辑,我希望在 A.h 中声明我的 A 类,在 B.h 中声明我的 B 类。同样,我希望我的 A 类的实现在 A.cpp 中,我的 B 类的实现在 B.cpp 中。

以下是我曾经在 VS2012 和 GCC 下编译所有文件(没有任何问题)的文件。出于可读性原因,我没有在 .h 文件中包含包含保护。

提前感谢您的帮助。

-------------- 啊------ --------------------------

class A
{
public:
    A();
    void printFromB();
    void createB();
private:
    class B;
    B* b;
};

#include "B.h"

---------------------------- B.h ------------------ --------------------------

#include <iostream>

class A;

class A::B
{
public:
    void print();
};

---------------------------- A.cpp ---------------- ----------------------------------------

#include "A.h"

A::A(){}

void A::printFromB() {
    b->print();
}

void A::createB(){
    b = new B;
}

---------------------------- B.cpp ---------------- ----------------------------------------

#include "A.h"

using namespace std;

void A::B::print()
{
        cout << endl << "B prints!" << endl;
}

-------------- main.cpp ------------------ ------------------------------------

#include "A.h"

int main()
{
    A a;
    a.createB();
    a.printFromB();

    return 0;
}

【问题讨论】:

  • B.h 有点无意义,因为它不能与A.h 分开包含 - 您需要A 的完整定义,而不仅仅是声明,才能使用嵌套类型名称B。除此之外,我没有看到任何明显狡猾的东西——但我也没有看到一个可以回答的问题。您对此代码有什么具体问题或疑问?
  • 是的,这符合要求。

标签: c++ standards c++98


【解决方案1】:

您的代码没有任何违法之处。

根据定义,如果没有class A,您将永远不会使用class B

但是正是这个定义提出了一个问题,“那为什么还要创建一个单独的文件呢?” 既然这是你的项目,你可以按照自己的意愿去做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多