2011-03-11 112 views
1

在我Function.h文件:错误:****尚未声明

class Function{ 
    public: 
    Function(); 
    int help(); 
}; 

在我Function.cpp文件:

#include "Function.h" 
int Function::help() //Error here 
{ 
    using namespace std; 
    cout << "Help"; 
    return 1; 
} 

在我Main.cpp的

#include <iostream> 
#include "Function.h" 
using namespace std; 

int menu(){ 
    Function fc; 
    fc.help(); 
    return 1; 
} 

int main(int args, char**argv){ 
    return menu(); 
} 


错误的是:'功能'尚未声明
有人可以告诉我为什么吗?谢谢。

我试过这样,问题就解决了,但我真的不明白为什么:
在Function.h文件:
我用的

class Function{ 
    public: 
    int status; 
    Function():status(1){} 
    int help(); 
}; 

以代替旧

class Function{ 
    public: 
    Function(); 
    int help(); 
}; 
+0

'function.h'是否包含其他头文件? – Naveen

+0

不,它不.. – Xitrum

+3

您编辑了您的问题,以便问题消失。这使得它不可读。建议保持编码错误并编写自己的答案。 – harper

回答

7

您所有的包含声明都丢失了#

#include "Function.h" 
^ 

其他一切看起来都不错,不过您还需要在Function.cpp中使用#include <iostream>,因为您使用的是cout

这里是我得到了编译和运行Function.cpp:

#include "Function.h" 
#include <iostream> 

int Function::help() // No error here 
{ 
    using namespace std; 
    cout << "Help"; 
    return 1; 
} 

Function::Function() 
{ 
} 
+0

啊谢谢,但#错过了,因为我无法在这里输入,我把它放在我的文件中 – Xitrum

+0

@user:嗯,那时我很茫然。你确定你发布的代码重现了错误吗? Function.cpp中是否还有其他代码? – Cameron

+0

不,这是我所有的代码 – Xitrum

2

您已经创建了功能类的构造函数的声明,而不包括它在你的实现(CPP文件)。

#include "Function.h" 

Function::Function(){ 
    // construction stuff here 
} 

int Function::help() //Error here 
{ 
using namespace std; 
cout << "Help"; 
return 1; 
} 
+0

好处所做的更改,但这不应该导致错误(这是链接时错误) – Cameron

+0

@Cameron:You – GWW

+0

ya,我试过但并不成功 – Xitrum

2

在第一个Function.h文件中,你声明了构造函数但没有定义它。在第二个Function.h文件(工作的那个文件)中,您已经定义并声明了Function构造函数。您可以在头文件或文件中定义和声明,或者在头文件中声明并在Function.cpp文件中定义。

例如,声明在头文件 “Function.h”:

class Function 
    { 
    Function(); 
    } 

,并定义在这里 “Function.cpp”:

Function::Function(){} 

或者另一种方法是声明和定义在头文件“Function.h”中:

Class Function 
    { 
    Function(){} 
    } 

另一件事,你已经在第二版的头文件是初始化“成员初始化列表”中的成员变量“status”,这是一件好事(见Scott Meyers的Effective C++,Item 4)。希望这有助于:)

4

我有一个类似的问题。确保你只有必需的头文件。我有两个包含对方的头文件,它吐出了这个错误。