2016-10-08 4 views
1

Я работаю над проектом, который объединяет оба класса C++ с использованием классов Boost и Object C. Я могу создать его, когда я пишу обертку для использования классов Objective C в C++, но когда я пишу оболочку для класса C++ в объекте C, проект не может построить с помощью семантической ошибки в boost/thread.hpp. Более конкретно в повышающем/type_traits/подробно/mp_defer.hppСвязывание Boost в Objective C и C++ объединенный проект xcode

Я использую LLVM C++ с поддержкой C++ 11

Я по следующей ссылке, чтобы обернуть классы перекрестного языка. http://philjordan.eu/article/mixing-objective-c-c++-and-objective-c++

Я ссылался на нижеследующий пост, но не разрешил свою проблему. Use boost library in cocoa project

Ниже приведен список ошибок:

struct mp_valid_impl 
{ 
template<template<class...> class G, class = G<T...>> 
static boost::true_type check(int); //use of undeclared identifier check 

template<template<class...> class> 
static boost::false_type check(...); 

using type = decltype(check<F>(0));//Cannot refer to class template F without template argument list 
}; 

template<template<class...> class F, class... T> 
using mp_valid = typename mp_valid_impl<F, T...>::type; //No type named boost in 'boost::type_traits_detail::m_valid_impl<......> 

дополнительные журналы отказов:

  • /usr/local/boost/include/boost/type_traits/detail/mp_defer.hpp: 37: 1: Нет типа с именем 'type' in 'boost :: type_traits_detail :: mp_valid_impl'

  • /usr/local/boost/include/boost/type_traits/detail/mp_de fer.hpp: 37: 1: Отсутствует тип с именем 'типа' в 'повышение :: type_traits_detail :: mp_valid_impl'

  • /usr/local/boost/include/boost/thread/pthread/timespec.hpp:52: 42: Недопустимые операнды для двоичного выражения ('const chrono :: nanoseconds' (aka 'const duration>') и 'typename boost :: enable_if>>, duration>> :: type' (aka 'boost :: chrono :: duration > '))

  • /usr/local/boost/include/boost/chrono/duration.hpp:405:62: Отсутствует тип с именем 'типа' в 'повышение :: common_type'

  • /USR /local/boost/include/boost/thread/pthread/condition_variable_fwd.hpp:239:38: Недопустимые операнды для двоичного выражения ('time_point' (aka 't ime_point ') и' stable_clock :: time_point '(aka' time_point '))

  • /usr/local/boost/include/boost/chrono/duration.hpp:559:17: Невозможно преобразовать' const duration> ' на «CD» (aka «int») без оператора преобразования

  • /usr/local/boost/include/boost/type_traits/detail/mp_defer.hpp:37:1: Тип типа 'type' в ' повышение :: type_traits_detail :: mp_valid_impl»

Я читал в Интернете, и пытаюсь в течение нескольких часов, пожалуйста, помогите. Благодаря

+0

Я ответил на ваш вопрос, но вы должны опубликовать полный журнал ошибок здесь, чтобы этот ответ был правильным. – PnotNP

+0

@NulledPointer Мое расширение файла .mm, я также указал типы файлов как Objective C++ Scource – stack

ответ

0

Усовершенствованная библиотека потоков в версии 1.61, похоже, несовместима с Objective C++ в LLVM-clang. Я переключился на использование родного потока C++ для замены потоковым классом на основе Boost-thread.

0

расширение A) Файл

LLVM-лязг автоматически понимает расширения файлов и будет скомпилировать программу с правильными аргументами clang.

Либо переименуйте файл в .mm расширение.

Или скомпилируйте его с помощью -x objective-c++.

CXXLAGS += -x objective-c++ 

B) Заголовки включают

Если вам не хватает включают заголовки, то вам необходимо добавить следующие

CXXLAGS += -I/path/to/boost/ 

/path/to/boost это каталог скомпилированного библиотеки буст.

 Смежные вопросы

  • Нет связанных вопросов^_^