我有一个问题,好吧,似乎不应该发生。来自基类的虚函数在"生成"中被覆盖。创建标题调用的宏的文件。
要覆盖的方法是virtual void GetLifetimeReplicatedProps( TArray< FLifetimeProperty > & OutLifetimeProps ) const OVERRIDE;
该语句位于生成文件(宏 - 地狱,第二个代码块)中,而后者又插入到类定义的顶部,在常规标题中(下面的第一个代码块)。
直言不讳,这是代码失败的原因:
班级.h文件
UCLASS()
class AABaseInventoryItem : public AActor
{
GENERATED_UCLASS_BODY()
// Properties
UPROPERTY(Category = Item, BlueprintReadOnly, Replicated)
uint16 ItemIndex; // Unique item index
// Overrides
virtual void ReceiveActorBeginOverlap(AActor *OtherActor) OVERRIDE;
};
包含宏的.h文件&#34; GENERATED_UCLASS_BODY()&#34;
// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
/*===========================================================================
C++ class header boilerplate exported from UnrealHeaderTool.
This is automatically generated by the tools.
DO NOT modify this manually! Edit the corresponding .h files instead!
===========================================================================*/
#include "ObjectBase.h"
#ifdef WTAGAME_ABaseInventoryItem_generated_h
#error "ABaseInventoryItem.generated.h already included, missing '#pragma once' in ABaseInventoryItem.h"
#endif
#define WTAGAME_ABaseInventoryItem_generated_h
#define AABaseInventoryItem_EVENTPARMS
#define AABaseInventoryItem_RPC_WRAPPERS
#define AABaseInventoryItem_CALLBACK_WRAPPERS
#define AABaseInventoryItem_INCLASS \
private: \
static void StaticRegisterNativesAABaseInventoryItem(); \
friend WTAGAME_API class UClass* Z_Construct_UClass_AABaseInventoryItem(); \
public: \
DECLARE_CLASS(AABaseInventoryItem, AActor, COMPILED_IN_FLAGS(0), 0, WTAGame, NO_API) \
/** Standard constructor, called after all reflected properties have been initialized */ NO_API AABaseInventoryItem(const class FPostConstructInitializeProperties& PCIP); \
DECLARE_SERIALIZER(AABaseInventoryItem) \
/** Indicates whether the class is compiled into the engine */ enum {IsIntrinsic=COMPILED_IN_INTRINSIC}; \
virtual void GetLifetimeReplicatedProps( TArray< FLifetimeProperty > & OutLifetimeProps ) const OVERRIDE;
#undef UCLASS_CURRENT_FILE_NAME
#define UCLASS_CURRENT_FILE_NAME AABaseInventoryItem
#undef UCLASS
#undef UINTERFACE
#define UCLASS(...) \
AABaseInventoryItem_EVENTPARMS
#undef GENERATED_UCLASS_BODY
#undef GENERATED_IINTERFACE_BODY
#define GENERATED_UCLASS_BODY() \
public: \
AABaseInventoryItem_RPC_WRAPPERS \
AABaseInventoryItem_CALLBACK_WRAPPERS \
AABaseInventoryItem_INCLASS \
public:
如果我将覆盖放在实际的头文件中,我会得到一个C2535编译器错误(已经定义/声明了成员函数)。但是,当我删除声明时,我得到一个未解决的外部符号错误(LNK2001),因为我已在CPP文件中实现它。那么,在我看来,MSVS 2013没有正确读取生成的文件/宏,并抱怨??
无论如何,它正在破坏开发,因为我无法编译!任何帮助都会很棒。
谢谢,问候 的Øyvind
答案 0 :(得分:0)
太抱歉了!我只是打错了......真的很尴尬。
但是,对于一些我知道之前已经提出类似问题的人(没有回答):你必须从头文件中提取OMIT声明。生成的头文件(宏)将为您声明它。只需在CPP文件中实现它,即使这个系统使组织和可读性更难。
此致