静态函数问题,g ++表示该类尚未声明

时间:2011-05-27 14:47:16

标签: c++ g++ static-methods

我正在尝试编译此代码,并且g ++一直告诉我'TimeFinder'尚未声明

标头文件

#ifndef _TIMEFINDER_H
#define _TIMEFINDER_H
#include <vector>
#include "timefinder.cpp"
using namespace std;
class TimeFinder
{
public:
    static vector<int> time_from_name(string filename);
    static int calc_seconds (vector <int> time);

};
#endif

CPP档案

#include "timefinder.h"
using namespace std;
vector<int> TimeFinder::time_from_name(string filename)//Line 14
{
    //Method Body
}

int TimeFinder::calc_seconds (vector <int> time1)//Line 37
{

    //Method Body
}

为什么会这样?我在网上查看了其他示例,我的代码似乎与其他人的代码相匹配......

编辑:确切的错误消息是

timefinder.cpp:14:错误:'TimeFinder'尚未声明

timefinder.cpp:37:错误:'TimeFinder'尚未声明

Edit2:对不起,我对此并不擅长,但我要感谢大家的建议。希望我的代码质量会因为它们而开始提高。

2 个答案:

答案 0 :(得分:7)

不要这样做:

#include "timefinder.cpp"

您将定义放入标题中,以便它们出现在声明之前。

您的代码还有很多其他问题 - 首先使用静态成员,在引用时按值传递向量和字符串,并在头文件中放置指令,但删除#include应该解决眼前的问题。

答案 1 :(得分:0)

#include“timefinder.cpp”

头文件通常不包含他们的.cpp实现文件,但只需要其他任何.h文件来满足所需的定义。通常情况下,.cpp文件包含完成依赖项所需的.h文件。

使用namespace std;

这也会导致很多破坏,应该在头文件中避免。在头文件中,您应始终使用其命名空间完全限定您的名称。原因是如果你将这个头文件导入到另一个头文件中,在其命名空间本地定义相同的符号,如“cout”,那么std :: cout和user :: cout会发生冲突并导致编译错误,甚至更糟糕的是可能选择错误的定义并在以后导致链接错误。