2013-01-04 58 views
0

什么不对这个代码:错误:X没有指定类型

class C { 
    public: 
    int h(); 
}; 

C he;   //Fine 
he.h();  //Error: 'he' does not name a type 

int main() { 
    C me;   //Fine 
    me.h();   //Fine 
} 

使用MinGW的4.6.2。

注意:我只编译,而不是链接。

+2

如果你可以在外面调用函数,为什么'main'存在? – Pubby

+0

编译时出现的错误是编译错误(a.k.a:错误,因为您的代码不符合语言规定的规则)。你在运行时得到的是运行时异常(a.k.a:你的代码遵循语言规则,但在执行时会做错事情)。 –

+0

我是为什么我可以做'诠释我',但不能对班级做同样的事情。我只是意识到我可以声明一个类,而不是执行它的功能。 –

回答

5

在最上一级,每个C++翻译单元必须由声明

translation-unit: 
    declaration-seq[opt] 

declaration-seq: 
    declaration 
    declaration-seq declaration 

伯尔he.h();不是声明。因此错误。

您可以引入一个虚拟变量来把它变成一个声明

int dummy = he.h(); 

和代码进行编译。但原始版本是非法的。

6

在函数外面,只能放置声明/定义。为了执行像he.h();这样的代码,需要将代码放入函数中。