可能是因为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

回到顶部