可能是因为C++头文件相互包含导致的标识符未声明问题。
Cpp的语法没学到家,代码很简单
A.h
#pragma once#include"B.h"
struct A {
double v;
B* bp;
};
typedef struct A A;
B.h
#pragma once#include"A.h"
class B {
public:
double b;
B() { b = 0; }
virtual bool f(const A& a) const = 0;
};
class BB :public B {
virtual bool f(const A& a) {
b = a.v;
return true;
}
};
报错如下:
回答
#pragma once是编译器相关的,有的编译器支持,有的编译器不支持,具体情况请查看编译器API文档,不过大部分编译器都有这个预处理指令了。
#ifndef,#define,#endif是C/C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式。
#ifndef __A_H__#define __A_H__
class B; //这里声明一下就可以了,不要循环引用。
struct A {
double v;
B* bp;
};
typedef struct A A;
#endif
#ifndef __B_H__#define __B_H__
#include"A.h"
class B {
public:
double b;
B() { b = 0; }
virtual bool f(const A& a) const = 0;
};
class BB :public B {
virtual bool f(const A& a) {
b = a.v;
return true;
}
};
#endif
以上是 可能是因为C++头文件相互包含导致的标识符未声明问题。 的全部内容, 来源链接: utcz.com/a/28299.html