以下是我的代码:
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
您的评论欢迎
答案 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