개발/기타 (6)
c++ template iterator 사용시 '식별자'은(는) 예기치 않은 토큰입니다.

위의 코드를 수행하더 도중 C2760 , C7510 오류가 발생하였다.

 

 오류가 발생하는 원인은 컴파일러가 T::iterator이라는 자료형을 이해하지 못하는 것이다.

 

 

 

 

그러므로 위와 같이 T::iterator의 중첩 의존 이름을 만들어준다면 이를 해결할 수있다.

 

  Comments,     Trackbacks
c++ 오퍼레이터 작성시 유의사항

 

위와같이 ()연산자 오버로딩이 있고

fun() 함수의 int , Test2 오버로딩이 있을 때

int() 를 반환해야하는지 Test2()를 반환해야하는지 애매해져 컴파일 에러가 생긴다.

  Comments,     Trackbacks
c++ 기초 - lvalue , rvalue

rvalue 탄생배경

1
2
3
4
5
6
7
8
9
10
11
12
std::vector<float> Math::ConvertToPercentage(const std::vector<float>& scores)
{
    std::vector<float> percentages;
    //여기서 복사를 수행
    return percentages;
}
 
int main()
{
    std::vector<float> scores;
    scores = ConvertToPercentage(scores);
}
cs

 percentages vector 컨테이너를 생성한 뒤 scores값을 복사하는 수행할 때,

위의 코드에선 2번의 복사가 일어난다

1. percentages에 넣을 때.

2. 반환할 때 (percentages는 스택영역에 있기때문에 범위밖으로 벗어날 때 삭제됨)

 

하지만 이걸 rValue가 생기며 바꾸어 주었다.

 

이제 lValue와 rValue를 알아야하는데

 

lValue는 우리가 평소에 알던 변수들이고,

 

//절대 성립할수없는 아래와 같은 경우 ( 상수 , lValue+1 , lValue+lValue, &(참조자) )  : rValue이다.

10 = 20;

(number+1)  = 20;

number+anotherNumber =20;

&number = 20;

 

 

이때 move함수가 바로 lvalue를 rvalue로 만들어주는 함수인데.

 

 

1
2
3
4
5
MyString::MyString(MyString&& other) : mString(other.mString),mSize(other.mSize)
{
    other.mString = nullptr;
    other.mSize = 0;
}
cs

위와 같이 MyString&&를 매개변수로 받는 이동생성자를 만들 시

other를 rValue처럼 lValue에 값을 넘겨주고(진짜 그대로) 임시객체처럼 사라지게 만든다.

 

 

 

  Comments,     Trackbacks
c++ 배열 붕괴 현상

https://ko.coder.work/so/c/270811

 

c - C의 배열이 포인터로 붕괴되는 이유는 무엇입니까? - IT 툴 넷

c - C의 배열이 포인터로 붕괴되는 이유는 무엇입니까? c arrays pointers

ko.coder.work

 

c++ 을 하다보면 sizeof(array)로 배열의 크기를 찾거나 배열을 매개변수로 넘겨줄 때 가 있다.

 

그러면 배열 붕괴현상 즉, 매개변수로 배열을 넘겨줄 때 배열이 포인터형식으로 되는 경험을 할 수있다.

 

이는 1970년대의 컴퓨터에서 스택 크기를 초과할 경우를 방지하기 위해 디자인 된 방식이다.

 

즉,

int main()

{

int arr[10] = {1,2,3,4,5,6,7,8,9,10};

sizeof(arr);  // 을 했을때 4가 나오지만

solution(arr);  // << arr의 사이즈 반환하는 함수

//이때는 4를 반환하게 된다.

//왜냐하면 배열이 포인터형식으로 바뀌기 때문이다.

//또한, sizeof(배열)을 했을 때 컴파일 시 상수화된다. 같은함수에서는 상수화된 이 크기를 보고 알 수 있는 것

//하지만 매개변수로 넘겨주엇을 때는 포인터로 넘겨주어 포인터인지 배열인지도 알 수 없고, 같은 함수에서 그 크기를 찾을 방법이 없기 때문에 알 수없다.

}

 

 

  Comments,     Trackbacks
유니티 빌드시 회색화면 나오는 오류

2020-02-26 따뜨스톤 개발도중

안드로이드 빌드시 캐릭터가 죽었을 경우 회색화면이 뜨는 경우가 발생.

 

원인은 게임내에 총 3개의 카메라 (메인,UI,이펙트) 를 사용하는데,

 

이때 UI카메라를 끄면서 발생하는 것으로 확인 되었다.

 

게임에 Don't Clear Flag를 쓰는 카메라들이 많은데,

 

유니티가 Don't Clear에 대해서 오류가 많이 발생하는 모양..

 

결국 UI카메라를 끄지않고 UI들의 GameObject를 끄는것으로 해결을 했다.

 

혹시라도 회색화면이 뜨는 오류가 난다면..

 

카메라 gameObject가 꺼질때 발생할 가능성이 높으므로

 

이를 참고할것!

  Comments,     Trackbacks
유니티 잡다한 팁 - 파티클 시스템 변수 참조 particleSystem.

유니티를 쓰다보면 파티클 시스템의 내부에 있는 값을 수정하는 경우가 있는데

 

이때 GetComponent<ParticleSystem>().main.~~ = 30f;

 

이런식으로하면 ParticleSystem의 프로퍼티가 Get만을 호환하여 컴파일 오류가 나는 경우가 있다.

 

그러므로 ParticleSystem _ps = gameObject.GetComponent<ParticleSystem>();

 

paticle.speed = 5f;

 

요론식으로 지역변수 선언한 뒤에 고쳐주면 됨

 

만약 안되면

 

 gameObject.GetComponent<ParticleSystem>().main; < 이거를 지역변수로 받길 바람

 

유니티 테크놀로지에서는 대충 이렇게 하는게 효율적이였다고 말함

  Comments,     Trackbacks