안드로이드에서 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

,