'분류 전체보기'에 해당되는 글 112건

안드로이드에서 Java 8 기능을 사용하려고 만지작거리다가 한참 있다가 빌드를 했었는데 위와 같은 오류가 발생했었다. 나 같은 경우 이 오류를 아래의 코드를 삽입해서 해결했었다.


android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

구체적인 원인은 다시 알아봐야할 것 같다. 


이거 했다가 저거 했다가하니까 원인이 뭔지도 모르겠고 왜 해결됐는지도 모르겠다. 다음부터는 체계적으로 접근해야겠다.



참고


Invoke-customs are only supported starting with android 0 --min-api 26



블로그 이미지

NCookie

,

lvalue, rvalue

C++ 2018. 5. 25. 10:11

lvalue : const를 포함한 모든 변수


rvalue : 해당 값을 사용하는 식을 제외한 곳에서는 유지되지 않는 임시 값


예제


https://msdn.microsoft.com/ko-kr/library/f90831hc.aspx

// Correct usage: the variable i is an lvalue.  
   i = 7;  
  
   // Incorrect usage: The left operand must be an lvalue (C2106).  
   7 = i; // C2106  
   j * 4 = 7; // C2106  
  
   // Correct usage: the dereferenced pointer is an lvalue.  
   *p = i;   
  
   const int ci = 7;  
   // Incorrect usage: the variable is a non-modifiable lvalue (C3892).  
   ci = 9; // C3892  
  
   // Correct usage: the conditional operator returns an lvalue.  
   ((i < 3) ? i : j) = 7;  



참조 연산자


& : lvalue 참조


&& : rvalue 참조



생성자 오버로딩 등에서도 사용할 수 있음


string str = string("h") + "e" + "l" + "l" + "o";


operator+를 호출할 때마다 새 임시 string 개체(rvalue)가 할당되고 반환됩니다. operator+는 소스 문자열이 lvalue인지 아니면 rvalue인지를 알 수 없으므로 한 문자열을 다른 문자열에 추가할 수 없음


즉, operator+ 오버로딩에서 &&을 사용하여 rvalue 참조를 처리하였기 때문에 2010 버전 이후로는 오류 발생 X

블로그 이미지

NCookie

,

사실 블로그에 올릴 정도의 내용이 아니기는 한데, 회사 코드를 그대로 가져다 사용하려다보니 생긴 문제라 일단 적어본다.


Qt에서는 데이터 관리와 표현을 위해 view, model 프로그래밍 방법을 사용한다. 자세한 내용은 [Qt Model/View 프로그래밍 #1. Model, View, Delegate]을 참고하자.


보통 view의 생성자에서 edit trigger를 설정하는데, 나 같은 경우는 이 부분이 문제가 없는데도 수정이 되지 않았다. 그것 때문에 끙끙 알면서 시간을 꽤 날렸는데, 엄청 간단하게 해결했다.


model 클래스에 flags라는 함수가 있는데 인자로 주어진 인덱스에게 item flag를 리턴한다. 그리고 재사용했던 회사 코드는 index.row() == 0일 때 edit이 되지 않도록 설정하고 있었다(...) 그러니까 안 되지.


코드에서는 테스트를 위해 기본적으로 하나의 row만 추가한 상태였고, 당연히 그 row는 edit이 되지 않는다. 다음부터는 코드를 외부에서 가져올 때 이런 설정 부분은 꼼꼼하게 봐야할 것 같다.



참고


Can't edit my QTableView cells

'QT' 카테고리의 다른 글

LNK2019 외부 기호 참조 위치 함수 에서 확인 하지 못했습니다  (0) 2019.01.28
Qt LNK 2019 에러  (1) 2018.04.30
Class hierarchy와 Object hierarchy  (0) 2018.04.04
Q_OBJECT 란  (1) 2018.02.28
블로그 이미지

NCookie

,

Qt LNK 2019 에러

QT 2018. 4. 30. 17:58

난 병신이다...


Qt 프로그램을 컴파일하다가 LNK2019 에러가 발생하면 보통 include 헤더를 놓친 것이 있거나 clean - run qmake - rebuild 를 해주면 해결된다고 한다.


그런데 난 몇 번을 확인하고 다시 해봐도 안 되서 멘탈이 나가있었다. 그러다가 다시 보니 오류가 나는 부분들은 slot만 해당되는 것이었고 나는 slot을 헤더에 선언만 해놓고 구현을 하지 않고 있었다.


하... 아무리 qt creator에서 이 부분을 지원해주지 않는다고 하지만 나 스스로가 너무 한심해졌다.


명심하자. qt에서 signal은 구현하지 않아도 되지만 slot은 선언했다면 꼭 implement 해줘야 한다. 안 그럼 LNK2019 에러를 보게 된다.

블로그 이미지

NCookie

,

처음에 object hierarchy라는 단어를 들었을 때에는 어리둥절했다. class hierarchy는 클래스 간의 상속 관계라는 것은 짐작할 수 있었지만, object는 어떤 것인지 감이 잘 잡히지 않았기 때문이다.



알아보니 간단한 개념이었다. class 계층은 인스턴스, 즉 object를 생성하기 위한 template이고, 이러한 class 간의 상속 관계를 class 계층이라고 하는 것이다. 


object 계층은 class 계층과는 다른 레벨의 추상화 단계에 있는 개념이다(another level of abstraction (e.g. in run-time). 코드 상에서 new로 할당된 객체(instance)들을 추상화하고, 이들간의 composition 관계를 나타낸 것이 object 계층이다.


enter image description here


위 사진을 보면, Wheel에는 고무나 프레임 같은 속성들이 있을텐데 여기서는 그 부분을 생략하여 추상화하였다. 


정리하자면, class 계층은 OOP에서의 클래스들 간의 관계이고, objects 계층은 실제 프로그램에서 메모리에 할당된 object 간의 관계를 나타낸 것이다.



알고나면 간단한 개념이다. 그런데 사수 분께서 이게 중요한 내용이라고 하니 우선은 염두하면서 개발해야겠다.




참고


oop - Class vs Object hierarchies


class - Object Hierarchy in OOP



'QT' 카테고리의 다른 글

LNK2019 외부 기호 참조 위치 함수 에서 확인 하지 못했습니다  (0) 2019.01.28
QTableView edit이 되지 않을 때  (3) 2018.05.23
Qt LNK 2019 에러  (1) 2018.04.30
Q_OBJECT 란  (1) 2018.02.28
블로그 이미지

NCookie

,

읽을 목록

카테고리 없음 2018. 3. 14. 16:14

개발


깔끔한 코드 모음


Anatomy of the Linux kernel


프로그래머 필독서 50선


리눅스로 개발하는 모든 사람들이 꼭 봐야하는 동영상


똑똑한 프로그래머를 멍청이로 만드는 방법


'평범하되 위대하게' 개발자 생산성 습관 7가지


The Elements of Computing Systems


어려운 것을 쉽게 배우는 방법


게으른 프로그래머의 힘 "혁신의 시작은 불평불만에서"


구글은 어떻게 0.1초 만에 검색할까?


당신의 코딩 학습 방식을 바꿀 사진


Threading Basics


Multithreading Technologies in Qt


사용자 수준 쓰레드와 커널 수준 쓰레드의 차이



그 외


삶에 도움을 줄 14가지의 놀라운 심리학적 지식







나 왜 이렇게 살고 있을까. 정신 차리자.

블로그 이미지

NCookie

,

Q_OBJECT 란

QT 2018. 2. 28. 11:12

Q_OBJECT


The Q_OBJECT macro must appear in the private section of a class definition that declares its own signals and slots or that uses other services provided by Qt's meta-object system.

http://doc.qt.io/qt-5/qobject.html#Q_OBJECT


Notice that the Q_OBJECT macro is mandatory for any object that implements signals, slots or properties. You also need to run the Meta Object Compiler on the source file. We strongly recommend the use of this macro in all subclasses of QObject regardless of whether or not they actually use signals, slots and properties, since failure to do so may lead certain functions to exhibit strange behavior.

http://doc.qt.io/qt-5/qobject.html - Detailed Description


Q_OBJECT는 siganl이나 slot 등 Qt의 meta-object system을 사용하려는 클래스에서 private 영역에 선언해야 하는 매크로이다. 라고 한다. 그리고 만약 위의 기능을 사용하지 않는다고 해도 이 매크로를 사용하는 것을 권장하고 있다.




The Meta-Object System


그렇다면 여기서 meta-object system이란 무엇일까


Qt에서의 meta-object system은 object 간의 통신 메카니즘을 위한 signal과 slot, 런타임 타입 정보, 그리고 동적 property 시스템을 제공한다.


그리고 아래 세 가지에 베이스를 두고 있다.

1. QObject 클래스 meta-object system을 이용할 수 있는 오브젝트에 대한 base 클래스를 제공한다.

2. 클래스의 private 섹션에 선언된 Q_OBJECT 매크로는 dynamic properties, signal, slot 등과 같은 meta-object의 기능을 사용할 수 있게 한다.

3. Meta-Object Compiler(moc)는 QObject의 subclass에게 meta-object 기능 구현에 필요한 코드를 지원한다.


moc 툴은 C++ 소스 파일을 읽어 Q_OBJECT 매크로가 선언된 클래스를 찾고, meta-object 코드가 포함된 소스를 생성한다. 이 생성된 코드는 클래스의 소스 파일에서 include 하는데, 일반적으로 클래스 구현과 함께 컴파일 및 링크가 된다.



원문을 보고 해석했는데, 이게 맞는지 잘 모르겠다.


나중에 정확히 이해하면 다시 정리해봐야겠다...




참고


http://doc.qt.io/qt-5/metaobjects.html

블로그 이미지

NCookie

,

Power-on Reset이란

임베디드 2018. 1. 31. 10:33

power-on reset(PoR)이란 전원이 Turn on 되었을 때 microprocessor 또는 microcontroller에 예측 가능하고 표준화된 전압을 제공하기 위한 회로이다. PoR 시스템은 microprocessor 또는 microcontroller가 전원을 켤 때마다 항상 같은 조건에서 시작할 수 있도록 해준다.


PoR 시스템은 peripheral일수도 있지만, 복잡한 프로세서나 컨트롤러의 경우 main chip 안에 포함되기도 한다. 대부분 기본적인 PoR 시스템은 저항과 캐패시터로 구성된다.(자세한건 나중에 다시 하련다.)



출처


power-on reset(PoR)

블로그 이미지

NCookie

,

  처음에 트랜지스터의 원리에 대해 간단하게 이해하려고 반도체에 대해 공부하다가 에너지 밴드라는 것을 알게 되었다. 정말 끝이 없다. 언제쯤 이것들을 정리할 수 있을까...


  Energy band(에너지 띠), 처음에 들었을 때는 이건 또 뭔가... 싶었지만 알고보니 중학교 때 들어봤던 것 같다. 그 때의 기억을 회상하며 다시 해보자.



에너지 준위


  원자 및 분자가 갖는 에너지의 값이다. 전자를 끌어당기는 원자핵에서 가까울수록 낮고 멀어질수록 높다. 에너지 준위가 높은 전자는 자유전자가 되기 쉽다. 그래서 최외각에 위치하는 전자는 원자간의 결합에 영향을 미치게 되는데 '원자가 전자'라고도 부른다.


  전자는 진동, 열, 빛이나 전자파의 조사, 다른 입자와의 충돌 등 에너지의 흡수 등으로 인해 에너지를 받게되면 에너지 준위가 더 높은 전자껍질로 이동하게 되는데, 이런 상태의 전자를 '들뜬 상태' 또는 '여기 상태'라고 한다. 반대로 가장 안정된 낮은 에너지 준위 상태를 '바닥 상태' 또는 '기저 상태'라고 한다.


  높은 에너지 준위로 들뜬 상태에 있던 전자는 불안정하여 안정된 상태의 낮은 에너지 준위로 돌아가려고 한다. 이 때 전자가 낮은 상태의 에너지 준위로 떨어지면서 빛이나 전자기파, 방사선 등의 에너지를 방출하게 된다.



에너지 띠(energy band)


결정 속에는 이온 껍질에 의한 주기적인 전기장이 존재하며, 이에 따라 결정 속에 전자가 가질 수 있는 에너지가 제한된다. 결정 속 전자가 존재할 수 있는 에너지 영역을 에너지 띠라고 부른다.


솔직히 나도 이게 뭔 소리인지는 잘 모르겠다. 어쨌든 에너지 준위에는 아래 그림과 같이 전자가 있을 수 있는 허용된 띠와 전자가 있을 수 없는 띠틈이 있다.




개인적으로 이 블로그에서 설명하는게 가장 잘 이해된다.



원자가띠와 전도띠


원자 내부의 전자들은 허용된 띠의 가장 낮은 에너띠부터 채워나가는데, 전자가 존재하는 가장 높은 에너지띠를 원자가띠라고 한다. 원자가띠에는 전자가 채워져있는데, 이 전자가 열에너지나 전기장으로부터 에너지를 흡수하여 더 높은 에너지띠로 전이하면 고체 내부에서 자유롭게 이동할 수 있다.


고체 내부에서 자유롭게 이동하는 전자를 자유전자라고 하며, 자유전자가 이동하여 전류가 흐르게 된다. 그래서 원자가띠 위에 있는 에너지띠를 전도띠라고 한다. 반도체와 부도체에서는 원자가띠 위에 띠틈이 있고, 그 위에 전도띠가 있다. 전도띠에는 전자가 차 있지 않아서 전도띠로 전이된 전자는 아주 작은 에너지를 주어도 자유전자가 된다. 전자가 원자가띠에서 전도띠로 전이하면 원자가띠에 전자가 비어 있는 (+) 성질을 띠는 부분이 생기게 되는데 이를 양공(holes) 또는 정공이라고 부른다.



마치며


솔직히 너무 깊게 파고든 것 같다. 지금 내게 중요한 것이 무엇인지 다시 한 번 생각해보자.



참고


에너지 준위 - 위키백과, 우리 모두의 백과사전


에너지 밴드


[반도체 이야기] 5. 에너지 띠(energy band)


'임베디드 > 개념' 카테고리의 다른 글

P형 반도체, N형 반도체  (0) 2018.01.04
다이오드  (0) 2018.01.04
단자와 반도체 소자  (0) 2018.01.03
JTAG  (0) 2018.01.02
개념 정리 목록  (0) 2018.01.02
블로그 이미지

NCookie

,

P형 반도체


전하를 옮기는 캐리어로 정공(Hole)이 사용되는 반도체이다. 양의 전하를 가지는 정공이 캐리어로서 이동해서 전류가 생긴다. 즉, 정공이 다수 캐리어가 되는 반도체이다.



N형 반도체


전하를 옮기는 캐리어로 자유전자가 사용되는 반도체이다. 음의 전하를 가지는 자유전자가 캐리어로서 이동해서 전류가 생긴다. 즉, 다수 캐리어가 전자가 되는 반도체이다.



다수 캐리어


다수반송자, 다수운반체라고도 부른다. n형과 p형 반도체 속에 있는 캐리어(전자 혹은 정공) 중에서 여러 개가 존재하는 캐리어를 말하며, 다수반송자 또는 다수운반체라고도 한다. 반도체의 전기저항은 이 다수캐리어에 의하여 결정된다. 



참고


P형 반도체 - 위키백과, 우리 모두의 백과사전


N형 반도체 - 위키백과, 우리 모두의 백과사전


다수캐리어 - doopedia

'임베디드 > 개념' 카테고리의 다른 글

에너지 띠  (0) 2018.01.04
다이오드  (0) 2018.01.04
단자와 반도체 소자  (0) 2018.01.03
JTAG  (0) 2018.01.02
개념 정리 목록  (0) 2018.01.02
블로그 이미지

NCookie

,