2017-02-12 13 views
0

我正在写C++,我的代码越来越大。我想知道如果我能以某种方式将代码片段移动到不同的文件。比方说,我有:如何将代码片段移动到C++中的不同文件?

class First { 
    class Second 
    { 
     void a(); 
     void b(); 
    }; 
    void c(); 
}; 

我想我的第二类移动到Second.h文件,然后当然写第二类机构和功能集成到Second.cpp文件。我怎样才能做到这一点?

+0

....尝试复制和粘贴?对不起,你一直都不清楚你在问什么,你试过了什么,你有什么问题等等。 –

+0

你为什么要/需要那种分离?你能否详细说明你的实际用例? –

回答

0

鉴于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() 
{ 

} 
+0

非常感谢,这就是我的意思。我遵循你的方式。现在,我想我的第二类(在第一类)的对象,但是我的编译器会抛出错误:“不完全类型不允许”和“First :: a使用未定义的类First :: Second”,尽管我的第二类HAS正如你的代码一样。你知道也许为什么我不能创建这个对象? – Adas

+0

不幸的是没有这样做的好方法。这是嵌套类的缺点之一,特别是当它们被打破时。如果我不得不建议我只在同一个标​​题中保留“First”和“Second”。这就像我的例子中的第一个代码片段。你可以在不同的'.cpp'文件中保存实现。问题是'First'没有在其标题中完整声明'Second',只有前向声明。 –

+0

@Adas为什么你首先使用嵌套类?你确定你不只是想把'second'的*实例*作为'First'的*成员*吗?另外,如果你用这种方式分解代码,那么'First'的用户需要包含'Second.h'。为避免出现这种情况,请在First.h的*底部添加#include Second.h,并确保添加了[include guard](https://en.wikipedia.org/wiki/Include_guard)。 –

0

假设您有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() { 
} 

我不确定这就是你想要的。

+0

非常感谢,这几乎是我想要的 – Adas

相关问题