错误 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 而不是#pragma 一次。从来没有遇到过特定于 MS 的 #pragma 的问题,但我更喜欢使用 #ifndef ... 版本的标头单一包含。 我尝试使用#ifndef,但它不起作用。此外,有时我会收到此 IntelliSense 错误:IntelliSense:不允许不完整类型...第 10 行第 27 列但它并不总是出现。 毕竟这是一个循环包含。我设法解决了这个问题,感谢您的帮助。【参考方案4】:

这个错误是由于循环包含导致的,所以我们可以通过在父类的底部添加子类的头来处理这个问题

【讨论】:

以上是关于错误 C2504 - 未定义基类的主要内容,如果未能解决你的问题,请参考以下文章

Qt - moc 导致 C2504:基类未定义

错误 C2504 - 未定义基类

基类未定义,但包含其标头

error C2504: 未定义基类

CArray<TYPE,ARG_TYPE>' : 基类未定义

基类未捕获 C++ 异常