2012-11-06 6 views

답변

3

오류가 아닌 포인터 사이의 은밀한을 시도하고 있다는 사실을 언급하고를 사용하여 문서 또는 기능에 대한 링크를 감사하겠습니다

QList<int> toCategories(QVariant qv) 
{ 
    QList<int>categories = new QList<int>(); 
    if(qv.isValid() && qv.type() == QVariant::List) 
    { 
     foreach(QVariant category,qv.toList()){ 
      categories.append(category.toInt()); 
     } 
    } 
    return categories; 
} 

: 여기에 기능입니다 QListQList에 대한 포인터에 연결합니다. 당신은 C를 처음부터 나는 this question을 검토하는 것이 좋습니다, ++

QList<int> toCategories(QVariant qv) 
{ 
    QList<int> categories; 
    if(qv.isValid() && qv.type() == QVariant::List) 
    { 
     foreach(QVariant category,qv.toList()){ 
      categories.append(category.toInt()); 
     } 
     return categories; 
    } 
} 

:

QList<int>* toCategories(QVariant qv) 
{ 
    QList<int>* categories = new QList<int>(); 
    if(qv.isValid() && qv.type() == QVariant::List) 
    { 
     foreach(QVariant category,qv.toList()){ 
      categories->append(category.toInt()); 
     } 
     return categories; 
    } 
} 

다른 방법으로, 당신은 포인터가 아닌 QList를 사용할 수 있습니다 다음과 같이 당신은 QList에 대한 포인터를 사용하거나 필요 .

내가 지적 할 수있는 것처럼, 나열된 함수는 특정 경로가 값을 반환하지 않는 문제가 있습니다 (코드의 일부만 복사하여 붙여 넣기 때문일 수도 있습니다).

+0

감사합니다. 따라서 일반적으로 'new'키워드를 사용하면 저장소가 힙에 만들어지며 해당 저장소 위치를 참조하는 포인터를 사용해야합니까? (예, 코드를 자르고 붙여 넣은 다음 잘못된 곳으로 돌려 놓습니다. 몇 줄 아래에 있어야합니다 ... 질문을 편집하겠습니다.) – DarwinIcesurfer

+0

@DarwinIcesurfer 예, 일반적으로 정확 합니다만, 그. 참조 연산자, 주소 연산자 및 값, 참조 및 포인터 사용에 대한 자습서/예제를 살펴보십시오. 또한 포인터 연산을 조사 할 가치가 있습니다. –

+1

Qt는 4.8 이후 적극적인 rvalue 지원을하므로 두 번째 변형은 처음보다 훨씬 안전하고 빠릅니다. 왜냐하면 카테고리 var는 복사되지 않고 외부로 옮겨지기 때문입니다. –

관련 문제