2016-09-28 81 views
-5

假设我们有两个类Foo和Bar。 我们可以声明Foo类和使用它的方法如下:正向声明一个类并声明一个类的变量有什么区别?

#include"foo.h" 

Foo foo 

class Bar{ 
    Bar(){ 
     foo.method1(); 
    } 
} 

而且我们有向前声明,主张声明Foo类如下:

#include"foo.h" 

class Foo 

class Bar{ 
    Bar(){ 
    } 
} 

主要有哪些区别在两个声明之间,以及何时正向声明更喜欢前向声明?

+0

有用的链接:https://www.quora.com/What-exactly-is-the-difference-between-the-declaration-of-a-class-and-a-definition-of-a-class –

+0

在你的第二个例子中'Foo'永远不会被使用,所以我不明白你的问题 – bolov

+1

[C++ - Forward declaration](http://stackoverflow.com/questions/4757565/c-forward-declaration) – dkg

回答

1

在第二种情况下,你不需要

#include"foo.h" 

在向前声明你刚才说的编译器“有Foo类的地方,但我不知道怎么看”。所以编译器可以引用它们但不能使用它们;

class Foo; //Forward declaration. 

Foo* foo; // ok. Just pointer. 
Foo foo;// error. Compiler can't instantiate object. 

#include "foo.h" 

Foo* foo; // ok. Just pointer. 
Foo foo;// ok. Compiler can instantiate object. 

因此,在某些情况下向前声明可以代替头文件列入。

相关问题