2

下面是我的代码:

数学核心.h

#ifndef __CC_MATHCORE_H__
#define __CC_MATHCORE_H__

#include "math.h"
class MathCore
{
public:
    MathCore();
    virtual ~MathCore( );
    int x (int n  );
};

#endif

数学核心.cpp

#ifndef __CC_MATHCORE_H__
#define __CC_MATHCORE_H__

#include "MathCore.h"

MathCore::MathCore()//a
{

}
MathCore::~ MathCore()//b
{

}
int MathCore::x (int n  )//c
{
    float v=0;
    return v;
}
#endif 

但它报错

a:C++ requires a type specifier for all declarations
  Use of undeclared identifier 'MathCore'
b:Expected a class or namespace
c:Expected a class or namespace

欢迎您的评论

4

4 回答 4

3

您不应该#define在 .cpp 和 .h 文件中都有它,因为它会阻止 .h 文件的内容被实际包含。

当您#include创建一个文件时,出于所有实际目的,它的行为方式与将该文件复制并粘贴到您拥有#include. 因此,您的 MathCore.cpp 的前几行实际上是这样的:

#ifndef __CC_MATHCORE_H__
#define __CC_MATHCORE_H__

#ifndef __CC_MATHCORE_H__
#define __CC_MATHCORE_H__
/* the rest of your .h file here */

当以这种方式重组时,它变得更加明显,第二个#ifndef永远不会匹配,因为它正在检查的符号是在上面定义的。

于 2013-11-01T12:08:03.927 回答
3

因为,在您的 C++ 文件中,您使用的标头保护与标头相同。第二行定义__CC_MATHCORE_H__. 在此之后,您包含标头,如果已定义,则该标头不执行任何操作。__CC_MATHCORE_H__从cpp文件中删除保护,你会没事的。在实际的实现文件中很少需要守卫(如果有的话)。

于 2013-11-01T12:08:16.333 回答
1
//////////////////////////////////MathCore.cpp 
#include "MathCore.h"

MathCore::MathCore()//a
{

}
MathCore::~ MathCore()//b
{

}
int MathCore::x (int n  )//c
{
    float v=0;
    return v;
}
于 2013-11-01T12:10:48.143 回答
0

从 MathCore.cpp 中删除包含防护

于 2013-11-01T12:08:13.530 回答