살군의 보조기억 장치

Another memory device…

클래스 생성자 사용시 warning 문제

leave a comment »

아래글에서 언급한 것 처럼, 처음 커밋하고 build bot 에서 에러가 났을 때, 조금 당황했다. opencv 가 멀티플랫폼에서 돌아가기 때문에 linux 나 mac, android 까지 빌드를 하는데 에러가 난 부분이 linux 와 android 컴파일에서 났기 때문이다. 이거 linux 랑 android 설치를 해야되나… 잠깐 고민을 했다. 다행히 빌드로그가 잘 나와있고 문제점을 구글링 해서 처리할 수 있었다.

두 가지 문제가 있었는데, 그 가운데 하나가 바로 클래스 생성자 사용시 생길 수 있는 문제이다. 이게 왜 문제가 되는지는 아직 모르겠지만, 혹시 이러한 문제를 만나더라도 심각하게 고민하지는 않아도 된다. 단순한 룰만 지켜주면 쉽게 해결할 수 있기 때문이다.

class A
{
    int i, j, k;
    A(int a, int b, int c) : i(a), k(c), j(b) {}
}

위의 line:4 에서 warning 이 발생한다. 이유인즉,

주의할 것은 초기화 순서는 초기화 리스트의 순서가 아니라 멤버 선언 순서로 되는데, 경우에 따라 이들 차이로 인해 미묘한 문제가 발생할 수 있기 때문에 경고를 주는 것입니다.
멤버 선언 순서와 초기화 리스트의 순서를 일치시키는 것이 바람직한 스타일입니다.

라는 것이다. 따라서 생성자를 아래와 같이 바꿔주면 해결할 수 있다.

    A(int a, int b, int c) : i(a), j(b), k(c) {}

평소에는 신경도 안쓰던 것들이 멀티플랫폼의 대규모 프로젝트에서는 민감하게 처리되는 듯 하다.

참고
Advertisements

Written by gomiski

2014/04/03 at 10:36 am

Posted in C++, General, Lecture, opencv, study

Tagged with , , ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: