c++ - visual c++ 未声明的标识符

标签 c++ identifier

在 A.h 中

#pragma once
include "B.h"
class A {
    B* aPtrToB;
}

在 B.h

#pragma once
include "A.h"
class B{
    A* aPtrToA;
}

Visual C++ 显示“错误 C2065:‘A’:未声明的标识符”

有什么想法吗?

谢谢!

最佳答案

你有一个循环包含。 #pragma once 阻止了由此产生的无限包含,但这意味着 A 中的任何一个都没有 B 的定义在它上面或 B 上面不会有 A 的定义,这取决于哪个先被编译。

解决方案是不#include 头文件,因为您只需要前向声明来声明指针:

#pragma once

class B;

class A {
    B* aPtrToB;
};

和:

#pragma once

class A;

class B {
    A* aPtrToA;
};

关于c++ - visual c++ 未声明的标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16678172/

相关文章:

c++ - C++中的构造函数和对象数组

c++ - 具有自定义指针类型 : *get() and operator*() give different output 的 unique_ptr

java - SQL Server 标识已开启,但 org.hibernate.id.IdentifierGenerationException : ids for this class must be manually assigned beforeQuery calling save()

javascript - 为什么 JavaScript 字典键不能使用 myDict.123 语法以数字开头?

java - 仅通过其唯一的实例 ID 来 equal() 类实例是不好的做法吗?

JSF 生成的 HTML 元素 ID 正在变化,如何将其设置为固定的元素 ID?

c++ - vector 下标超出范围 - 更新方法

c++ - boost::lock_guard 分配、构造函数和析构函数开销

c++ - 将 lua 与 c++ dll 一起使用

c# - 如何在 C# 中检查一个字符串不是关键字或类型