나는 튜토리얼을 볼때 생각없이 아무것도 모른다고 그대로 따라치면서 배우는걸 매우 싫어한다.

옛날에 유니티 처음배울때야 그랬지만 결국 외우기밖에 안됐으니까.

 

문제의 원인은 이것.

튜토리얼의 소스는 UUserWidget을 상속받은 자식을 또 상속받아서 손주뻘의 클래스를 만들어서

스크린샷과 같이 초기화하면 잘 되는데.

 

내 프로젝트에선 그럴 필요가 없어서 손주를 안만들고 그냥 한번만 상속해서 하려니 저렇게 된것이다.

 

UuserWidget을 상속받아 메인메뉴 페이지를 만들고있는데.

분명 엔진소스에도 저렇게 생성자쓰라고 명시되어있는데 가져다 쓰려니.

기본생성자가 없다고 저렇게 컴파일 에러가 난다.

 

그래서 기본생성자 만들어서 넣어보고

기본생성자 없애서 안쓸거라고 delete해보고 

별지롤을 다해봤는데 해결이 안되더라.

 

그래서 X나게 구글링했다.

 

https://answers.unrealengine.com/questions/252844/view.html

 

Which (const FObjectInitializer& ObjectInitializer) is correct? - UE4 AnswerHub

Hello, Jibberish Keyword class in this context means that the class being used may not be defined at this point, but there is a definition, so compiler won't classify class name as undefined. However, FObjectInitializer is usually defined in your Unreal En

answers.unrealengine.com

 

https://answers.unrealengine.com/questions/58854/error-c2512-no-appropriate-default-constructor-ava.html

 

error C2512 no appropriate default constructor available - UE4 AnswerHub

Attachments: 첨부는 (이미지 포함) 5 개까지, 각각 최대 5.2 MB 씩 총 5.2 MB 만큼 사용할 수 있습니다.

answers.unrealengine.com

 

 

 

https://www.slideshare.net/secret/EywLl7Qd2CWYkc

 

프로그래머를 괴롭히는 ue4의 함정들

Slideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy. Slideshare uses c

www.slideshare.net

 

해결방법은 주석친 부분을 삭제하는것이었고

 

저 부분의 정의를 보면  cpp로 가게된다.

 

알아보니 언리얼클래스를 상속받아 쓸때

 엔진소스에서 만들어놓은 초기화내용을 프로그래머가 임의로 덮어쓰지 못하게 막아놓은것이다.

그니까 : Super(ObjectInitializer)을 붙여서 부모생성자의 초기화는 그대로 받아와서 초기화 한 후에

내가 하고싶은 초기화를 추가 하도록 만들어 놓았다는 것 이다.

 

주로 컴포넌트추가 설정할때 쓴다고 줏어들음

 

버전은 4.22

그리고 헤더파일에 있는 생성자도 삭제해줘야한다. 

 

의도는 알았고 문제 해결도 되었는데.

뭔가 또 엿먹은 기분은 뭘까..

 

물론 구글링하면 나오지만 까먹을만해서. 업로드

 

OpenLevel이 호출할 함수이름이다.

 

유니티는 그냥 코루틴쓰면 되는데..X

'언리얼엔진 > c++' 카테고리의 다른 글

ObjectInitializer 생성자가 하루를 버리게하다.  (0) 2019.05.22
Const 위치마다 헷갈려서 정리.  (0) 2019.04.16
스마트포인터  (0) 2019.04.10

Const &char Class::Method (int* pt)

 

해당 메소드의 반환값(char)을 상수화시켜서 못바꾸게 하겠다는뜻.

 

이걸 그대로 받아서 변수로쓰면 못바꿈.

 

&char Class::Method (int* pt) Const

 

메소드 자체를 상수화 하겠다는뜻.

 

메모리스택에서 얘가 다 돌고 해제될때까지 

 

내부 데이터들이 다 상수화되서 안바뀜. 

 

스레드,동시성 프로그래밍할떄 유용할거같다.

 

&char Class::Method (Const int* pt) 

 

pt라는 포인터가 가리키는 매개변수의 주소값을 상수화시켜버리는것.

 

어디가리키는지는 못바꾸는데 가리키는곳의 데이터는 바꿀 수있다.

 

 

&char Class::Method (int* Const pt) 

 

pt라는 포인터가 가리키는 매개변수의 데이터를 상수화 시켜버림.

 

포인터가 가리키는 주소는 바꿀수있는데 데이터를 못바꿈

 

 

규칙성을 따져보면

const는 앞에 뭔가 있으면 그거 하나를 얼려버림.

그리고 앞에 아무것도 없고 뒤에 뭔가 있으면 그걸 다 얼려버림.

 

const를 어떻게 넣냐에 따라서 

프로그래머가 원치않게 변수조작하는것을 미연에 방지해줄수 있음

include <memory.h> 헤더파일을 포함시켜야함

유니크포인터.

unique_ptr -->이 포인터가 한 인스턴스를 가지면 다른 포인터가 얘를 가리키려고할때 컴파일에러로 막는다.

또 유니크포인터가 스코프를 탈출할때 소멸자단에서 메모리를 해제해준다.

순수c++11 --> std::unique_ptr<타입> 이름(new 타입(매개변수))

c++14--> std::unique_ptr<타입> = make_unique<타입>(매개변수)

 

언리얼c++ -->TUniquePtr

https://api.unrealengine.com/INT/API/Runtime/Core/Templates/TUniquePtr/index.html

 

 

공유포인터.

c++14이후 나왔다.

유니크 포인터와 달리 얘는 여러포인터가 나를 참조할수있다.

다만 내가 가지고있는 데이터와

내가 몇개의 포인터한테 공유되고있는지 카운팅한다.

강한참조횟수와 약한참조횟수를 카운팅함. 이외에 잡다한기능 몇개 있음.

 

 

Uobject가 이에 해당된다.

참조횟수가 카운팅되고 GC가 메모리를 회수해간다.

Newobject< >로 메모리할당이 된경우

Uobject::ConditionalBeginDestroy() 멤버함수로 수동 메모리해제도 가능하다.

이 이하는

이미 c++절에서 설명했고

언리얼 레퍼런스보다 더 정리를 잘할수 없어서 그냥 링크남기고 ㅌㅌ 하겠따.

주의사항 짧게하자면 공유포인터는 선언할때 초기화 안하면 안되고

isvalid로 유효성 검사를 할수있다.

공유레퍼런스는 널포인터를 가리키는게 안되서 안전하니까.

왠만하면 공유 레퍼런스 쓰란다.

http://api.unrealengine.com/KOR/Programming/UnrealArchitecture/SmartPointerLibrary/SharedPointer/

 

약한포인터.

공유포인터가 지들끼리 강한참조로 서로 공유하고있으면 서로 참조할 경우.

가비지컬렉터가 돌때 참조횟수를 기준으로 검열을하는데

이때 서로 공유하고있는 애들끼리 무한으로 참조하고 앉아있으면 가비지컬렉터는 얘는 쓰레기가 아닌줄알고

메모리에 계속 냅둔다 이것의 순환참조의 문제다. .

그래서 약한 포인터가 나왔다.

무조건 공유포인터 하나를 주인으로 참조하고있어야 하는데.

약한포인터는 공유포인터가 없어지면 주인따라서 같이 죽어버린다. 때문에 메모리에 남는일이 없다.

그치만 , 그 이유때문에 약한포인터는 참조한다고했을때 언제 없어질지몰라서 위험하다.

떄문에 lock으로 잠가서 넘겨주는것이 있다.

아래코드는 예들들어 설명.

 

http://api.unrealengine.com/KOR/Programming/UnrealArchitecture/SmartPointerLibrary/WeakPointer/index.html

+ Recent posts