声明名称in.h但在Xcode中的.cpp中报告未声明

时间:2013-11-01 12:06:08

标签: c++ xcode

以下是我的代码:

MathCore.h

#ifndef __CC_MATHCORE_H__
#define __CC_MATHCORE_H__

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

#endif

MathCore.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 个答案:

答案 0 :(得分:3)

你不应该在.cpp和.h文件中都有#define,因为它会阻止实际包含.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永远不会匹配,因为它正在检查的符号是在上面定义的。

答案 1 :(得分:3)

因为在您的C ++文件中,您使用与标题相同的标题保护。第二行定义__CC_MATHCORE_H__。在此之后,如果定义了__CC_MATHCORE_H__,则包含标题, nothing 。从cpp文件中删除后卫,你会没事的。实际的实现文件中很少需要防护。

答案 2 :(得分:1)

//////////////////////////////////MathCore.cpp 
#include "MathCore.h"

MathCore::MathCore()//a
{

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

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

答案 3 :(得分:0)

从MathCore.cpp

中删除include guard