错误 C2504 - 未定义基类
Posted
技术标签:
【中文标题】错误 C2504 - 未定义基类【英文标题】:Error C2504 - Base class undefined 【发布时间】:2014-01-29 15:18:43 【问题描述】:我有一个相当简单的问题
这是我的firstcluster.h
#pragma once
#include "cluster.h"
class FirstCluster:public Cluster
...
public:
...
;
cluster.h 的代码:
#pragma once
// File: cluster.h
class Cluster
protected:
...
public:
...
;
我得到了错误:
error C2504: 'Cluster' : base class undefined
有时我会收到此 IntelliSense 错误:
IntelliSense: incomplete type is not allowed ... Line 10 Column 27
但它并不总是出现。
如您所见,包含cluster.h
,所有其他头文件均受#pragma once
保护
我真的不知道这里出了什么问题?
即使我使用#pragma once
保护了所有内容,通告是否也会出现问题?
我正在使用 Visual Studio 2010。
【问题讨论】:
显示集群代码 我用cluster.h的代码更新了第一篇文章 是的,即使使用#pragma once 和/或包含警卫,循环包含问题仍然会出现。但是,在这种情况下,您必须在 cluster.h 中包含 FirstCluster.h 才能创建循环包含。你这样做了吗?如果是,为什么? 这是您得到的唯一错误吗?确保发布按第一个错误排序的所有错误。 毕竟这是一个循环包含。我设法解决了这个问题,感谢您的帮助。 【参考方案1】:由于循环包含,我得到了这个。
我将所有标题都包含在“include.h”中,并将其包含在其他任何地方。
我设法通过在 include.h 中包含标准头文件来避免循环包含。
【讨论】:
【参考方案2】:我也遇到了同样的问题,添加
#ifndef CLUSTER_H
#define CLUSTER_H
/* your code */
#endif
帮助解决了这个问题。 ifndef 部分显然是为了包含重复,但我认为“定义”确实有帮助。
【讨论】:
【参考方案3】:这段代码看起来很正常,所以: 如果 cluster.h 实际上定义了 Cluster 类,则检查 Cluster 周围是否缺少命名空间(如果使用命名空间)、“Cluster”与“cluster”、“cLuster”等中的大写小写用法,还要检查 Cluster定义对另一个类来说不是本地的。
希望这会有所帮助。
【讨论】:
我添加了 cluster.h 的代码我没有使用命名空间,我无法找到任何上下不一致 o.O 如果您隔离这 2 个 .h 和 2 个 .cpp 文件并尝试编译它们,它们是否有效?另外,尝试在标题周围使用#ifndef _Cluster_H_/#define _Cluster_H_/.../#endif这个错误是由于循环包含导致的,所以我们可以通过在父类的底部添加子类的头来处理这个问题
【讨论】:
以上是关于错误 C2504 - 未定义基类的主要内容,如果未能解决你的问题,请参考以下文章