UE4调用AMainCharacter的AddCoin函数报错:不允许指向不完整类的指针
UE4 调用AMainCharacter::AddCoin() 编译错误解决指南
遇到的编译错误
- 调用
AddCoin()时提示:Pointer to incomplete class not allowed - 引入
MainCharacter.h时提示:无法打开源文件 - 强制转换
AActor到AMainCharacter编译失败 - 引入
MainCharacter.generated.h后触发:error C2027: 使用未定义类型‘AMainCharacter’
错误原因分析
- 头文件引用错误:
MyCoinActor.cpp中错误引入生成文件而非类的主头文件,导致编译器无法获取AMainCharacter的完整定义 - 前向声明缺失:
MyCoinActor.h未声明AMainCharacter类型,编译器无法识别该类 - 成员访问权限不足:
AddCoin()函数处于protected作用域,外部类无法直接调用 - 语法错误:
MainCharacter.cpp中创建相机组件的代码存在语法问题,间接导致头文件生成异常
具体修复步骤
1. 修复MyCoinActor的头文件与前向声明
在MyCoinActor.h顶部添加AMainCharacter的前向声明:
#pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "MyCoinActor.generated.h" // 前向声明AMainCharacter类 class AMainCharacter; UCLASS() class SOUL_API AMyCoinActor : public AActor { // 原有代码保持不变 };
在MyCoinActor.cpp中替换错误的头文件引用:
#include "MyCoinActor.h" #include "Components/SphereComponent.h" // 替换为正确的主头文件 #include "MainCharacter.h" // 原有代码保持不变
2. 调整AddCoin()的访问权限
打开MainCharacter.h,将AddCoin()从protected块移至public块:
public: // Sets default values for this character's properties AMainCharacter(); protected: // Called when the game starts or when spawned virtual void BeginPlay() override; void MoveLeftRight(float Value); void MoveForwardBackward(float Value); // 移至public作用域 public: UFUNCTION() void AddCoin(); // 原有public代码保持不变
3. 修复MainCharacter.cpp的语法错误
找到创建相机组件的代码行,补充缺失的尖括号:
// 原错误代码 // FollowCamera = CreateDefaultSubobject<UCameraComponent(TEXT("FollowCamera")); // 修复后代码 FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera"));
4. 清理并重新编译项目
- 删除项目根目录下的
Intermediate和Binaries文件夹 - 右键项目文件选择
Generate Visual Studio project files - 重新打开VS并编译项目
内容的提问来源于stack exchange,提问作者WinterSolstice
相关产品推荐
相关产品推荐

