Hi all,
I have created 3 classes :
- MyNodeClass
- MySegmentClass
- InfrastructureGraphManager
There was a circular dependancy between MyNodeClass and MySegmentClass, which i solved by using a forward declaration. But the compiler failed and reported :
“…/InfrastructureGraphManager.h Error: Unrecognized type ‘MyNodeClass’ - type must be a UCLASS, USTRUCT or UENUM”
=>
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = data)
TArray< MyNodeClass *> Nodes;
Here is my code :
**
MyNodeClass.h**
#pragma once
#include "CoreMinimal.h"
UENUM(BlueprintType)
enum class NodeType : uint8
{
...
};
UENUM(BlueprintType)
enum class SegmentType : uint8
{
...
};
class MySegmentClass; //forward declaration
class CITYBUILDER_API MyNodeClass
{
public:
MyNodeClass();
~MyNodeClass();
FVector Location;
MySegmentClass * Segments[10];
};
**MyNodeClass.cpp **
#include "CityBuilder.h"
#include "MyNodeClass.h"
...
MySegmentClass.h
#pragma once
#include "CoreMinimal.h"
class CITYBUILDER_API MySegmentClass
{
public:
MySegmentClass();
~MySegmentClass();
bool TwoWay; //sens unique ou double sens
SegmentType type;
};
MySegmentClass.cpp
#include "CityBuilder.h"
#include "MyNodeClass.h"
#include "MySegmentClass.h"
...
InfrastructureGraphManager.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "InfrastructureGraphManager.generated.h"
UCLASS()
class CITYBUILDER_API AInfrastructureGraphManager : public AActor
{
GENERATED_BODY()
public:
AInfrastructureGraphManager();
protected:
virtual void BeginPlay() override;
public:
virtual void Tick(float DeltaTime) override;
MyNodeClass * CreateNode(FVector Location);
void ConnectNodes(MyNodeClass * Nod1, MyNodeClass * Nod2, SegmentType SegType);
void DeleteNode(MyNodeClass * Nod);
MySegmentClass * CreateSegment(void);
void DeleteSegment(MySegmentClass * Segm);
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = data)
TArray<MyNodeClass*> Nodes;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = data)
TArray<MySegmentClass*> Segments;
};
InfrastructureGraphManager.cpp
#include "CityBuilder.h"
#include "MySegmentClass.h"
#include "InfrastructureGraphManager.h"
...
What is causing the issue please ?