我正在写C++
,我的代码越来越大。我想知道如果我能以某种方式将代码片段移动到不同的文件。比方说,我有:如何将代码片段移动到C++中的不同文件?
class First {
class Second
{
void a();
void b();
};
void c();
};
我想我的第二类移动到Second.h文件,然后当然写第二类机构和功能集成到Second.cpp文件。我怎样才能做到这一点?
我正在写C++
,我的代码越来越大。我想知道如果我能以某种方式将代码片段移动到不同的文件。比方说,我有:如何将代码片段移动到C++中的不同文件?
class First {
class Second
{
void a();
void b();
};
void c();
};
我想我的第二类移动到Second.h文件,然后当然写第二类机构和功能集成到Second.cpp文件。我怎样才能做到这一点?
鉴于class Second
嵌套在class First
你可以通过重构你的代码,像这样开始:
class First
{
class Second;
void c();
};
class First::Second
{
void a();
void b();
};
从那里很容易两类闯入单独的文件:
First.h:
class First
{
class Second;
void c();
};
而且Second.h
#include "First.h"
class First::Second
{
void a();
void b();
};
然后你.cpp
文件将是:
First.cpp
#include "First.h"
void First::c()
{
}
Second.cpp
#include "Second.h"
void First::Second::a()
{
}
void First::Second::b()
{
}
非常感谢,这就是我的意思。我遵循你的方式。现在,我想我的第二类(在第一类)的对象,但是我的编译器会抛出错误:“不完全类型不允许”和“First :: a使用未定义的类First :: Second”,尽管我的第二类HAS正如你的代码一样。你知道也许为什么我不能创建这个对象? – Adas
不幸的是没有这样做的好方法。这是嵌套类的缺点之一,特别是当它们被打破时。如果我不得不建议我只在同一个标题中保留“First”和“Second”。这就像我的例子中的第一个代码片段。你可以在不同的'.cpp'文件中保存实现。问题是'First'没有在其标题中完整声明'Second',只有前向声明。 –
@Adas为什么你首先使用嵌套类?你确定你不只是想把'second'的*实例*作为'First'的*成员*吗?另外,如果你用这种方式分解代码,那么'First'的用户需要包含'Second.h'。为避免出现这种情况,请在First.h的*底部添加#include Second.h,并确保添加了[include guard](https://en.wikipedia.org/wiki/Include_guard)。 –
假设您有First.h
class First{
class Second
{
void a();
void b();
};
void c();
};
你可以提供的class Second
在一个单独的翻译单元的实现: 像
First.cpp:
#include "First.h"
void First::c() {
}
Second.cpp:
#include "First.h"
void First::Second::a() {
}
void First::Second::b() {
}
我不确定这就是你想要的。
非常感谢,这几乎是我想要的 – Adas
....尝试复制和粘贴?对不起,你一直都不清楚你在问什么,你试过了什么,你有什么问题等等。 –
你为什么要/需要那种分离?你能否详细说明你的实际用例? –