好的,所以我们在C ++课程中介绍类,在上一课中我们了解到,如果你在同一个文件中#include同一个类多次会发生不好的事情,防止这种情况的方法是使用#头文件中的ifdef,#define和#endif。所以这里只是一个我想写的简单程序,而且由于这些人#,它失败了。似乎#ifdef之后的代码被一个讽刺者忽略了。这里的问题是什么?
这是程序,它由3个文件组成,还要注意我知道没有.h文件程序中的#thing工作正常,而且在这个特定的程序中,我甚至不需要它们。我正在研究需要使用它们的大型项目,他们只是不工作。
谢谢。
==========主文件===========
#include "Circle.h"
int main()
{
Circle C(5);
C.output();
return 0;
}
======== Circle.h文件==========
#ifdef CIRCLE_H
#define CIRCLE_H
#include <iostream>
using namespace std;
class Circle
{
public:
Circle(int);
void output();
private:
int n;
};
#endif
======== Circle.cpp文件========
#include "Circle.h"
Circle::Circle(int numb)
{
n=numb;
}
void Circle::output()
{
cout<<"The number is "<<n<<endl;
}
答案 0 :(得分:2)
您应该使用#ifndef CIRCLE_H
代替#ifdef CIRCLE_H
。这意味着“如果没有定义”。
答案 1 :(得分:0)
问题是,您使用了错误的预处理器构造:
#ifdef CIRCLE_H //#ifdef is not the right one!
#define CIRCLE_H
//...
#endif
您应该使用 #ifndef 。为什么呢?
#ifdef
表示if token with name, placed after this instruction is already defined, then...
。你认为这会奏效吗?如果您包含此文件,则CIRCLE_H
未在任何地方定义,因此#ifdef CIRCLE_H
将始终评估为false,#ifdef
和#endif
之间的内容将始终被丢弃。
但是当你这样写:
#ifndef CIRCLE_H
#define CIRCLE_H
//...
#endif
你说:if CIRCLE_H has not yet been defined
(第一次包含文件时为真)then define CIRCLE_H and proceed
。然后定义CIRCLE_H
,并且每个下一个包含都不会通过此#ifndef
,因为CIRCLE_H
已经存在。