Hey I’m new to C++ and I’m wondering if this is possible in Unreal C++:
//Works fine in C++11
struct OctreeNode{
int level;
OctreeNode* child;
OctreeNode(){
child = nullptr;
}
};
I want to do this for my Octree-implementation.
Hey I’m new to C++ and I’m wondering if this is possible in Unreal C++:
//Works fine in C++11
struct OctreeNode{
int level;
OctreeNode* child;
OctreeNode(){
child = nullptr;
}
};
I want to do this for my Octree-implementation.
Compile-tested Code For You
I just tested this as compiling just fine, just put it below all your #includes
Use int32 not int because int is ambiguous in terms of size and is compiler/platform dependent, int32 is exact on all platforms.
You can also use int64 if you need more value range.
I also changed to use capitalizations/naming scheme that conforms to UE4 standards.
You really must initialize Level since it will not get a default value, structs get garbage/uninitialized memory for values unless specified in constructor.
//Works fine in UE4 C++
struct FOctreeNode
{
int32 Level;
FOctreeNode* Child;
FOctreeNode()
{
Level = 0;
Child = nullptr;
}
};
Enjoy!
Rama
Alright thanks Rama!
Actually, this gives me the following exception:
USTRUCT(BlueprintType)
struct FOctreeNode {
GENERATED_USTRUCT_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Octree Struct")
int32 Level;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Octree Struct")
int32 Depth;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Octree Struct")
FOctreeNode* Child;
FOctreeNode(){
Level = 0;
Depth = 0;
Child = nullptr;
}
};
FOctreeNode.h(18): error : In TemporaryUHTHeader_FOctreeNode: Inappropriate '*' on variable of type 'FOctreeNode', cannot have an exposed pointer to this type.
Hi there!
You can’t use a pointer to a USTRUCT with UPROPERTY()
This means you cannot replicate such a pointer using USTRUCT replication
But I dont think you really want to replicate an octatree over the network anyway right! Just do the calcs on the server and send move commands / required visual updates
so just do this
USTRUCT(BlueprintType)
struct FOctreeNode {
GENERATED_USTRUCT_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Octree Struct")
int32 Level;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Octree Struct")
int32 Depth;
FOctreeNode* Child;
FOctreeNode(){
Level = 0;
Depth = 0;
Child = nullptr;
}
};
You can still edit such a struct in the editor, you just will have to link the pointers together in code at runtime
Rama