2016-07-24 5 views
0

C++로 함수를 작성하고 성공적으로 작성했습니다.부스트 파이썬 C++ 함수가 다른 함수를 호출하는 중 오류가 발생했습니다.

그러나 C++의 다른 함수에서 호출하면 빌드가 실패합니다.

double getlistvalue(boost::python::list l, int index) 
{ 
    if (index = -1) 
     return 0; 
    else 
     return boost::python::extract<double>(l[index]); 

} 

double xx(boost::python::list l, int index) 
{ 
    return getlistvalue(l, index); 
} 

위의 코드는 두 번째 기능없이 빌드합니다. error info

그것을 해결하는 방법에 대한 아이디어를 공유하십시오 : 여기

오류 정보입니다. 고마워.

답변

1

복사 생성자가 필요한 값으로 목록을 전달하고 있습니다. 이 오류 메시지는 목록에 복사 생성자가 제공되지 않았 음을 알려줍니다. 따라서 솔루션은 참조로 목록을 전달하는 것입니다.

double getlistvalue(const boost::python::list &l, int index) 

(다른 기능의 경우에도 동일합니다).

일반적으로 목록과 같이 복잡한 개체를 값으로 전달하는 것은 좋지 않습니다. 왜냐하면 복사 생성자가 제공되었다고해도 실제로 사본을 작성하는 것은 상당히 비쌀 수 있기 때문입니다.

+0

답장을 보내 주셔서 감사합니다. 답이 맞으면 문제가 해결됩니다. 다른 방법은 boost/python 헤더를 포함하기 전에 #define BOOST_PYTHON_STATIC_LIB를 추가하는 것입니다. 비슷한 문제가있는 사람들에게만 해당됩니다. – datalearning

+0

@datalearning 파이썬리스트에는 복사 생성자가 있습니다. 오류 메시지 (확인되지 ​​않은 기호)는 적절한 기호 가시성을 가진 Boost.Python 라이브러리에 링크해야 함을 나타냅니다. 파이썬 객체는 참조 카운트되며 Boost.Python 객체는 본질적으로 스마트 포인터입니다. 결과적으로 이러한 객체를 값으로 전달하는 것은 저렴합니다. –

관련 문제