Ошибка getOpenFilePath в ранней части учебника Cinder в XCode на 10.6.8

Я только что загрузил Cinder v0.8.4 на свой Macbook Pro, работающий под управлением OSX 10.6.8, и начал прорабатывать главу 1 «Добро пожаловать в Cinder» с использованием Xcode. Я использовал инструмент Tinderbox, чтобы создать новый проект под названием CinderProjectApp с параметрами по умолчанию. Я также следовал инструкциям, чтобы убедиться, что моя библиотека наддува совпадает со стандартной (1.4.2).

Когда я начал работать с учебником, я хотел посмотреть, смогу ли я загрузить свое собственное изображение из папки / resources, поэтому я скачал изображение «Broccoli.jpg» и добавил его в свой каталог CinderProjectApp / resources /.

Вот моя функция draw ():

void CinderProjectApp::draw()
{
gl::clear( Color( 0, 0, 0 ), true );

try
{
std::string p = FilePath( "", ImageIo::getLoadExtensions() );

if( ! p.empty() )
{ // an empty string means the user canceled
myImage = gl::Texture( loadImage( p ) );
}
}

catch( ... )
{
console() << "Unable to load the image." << std::endl;
}

gl::draw(myImage, getWindowBounds());
}

Когда я компилирую весь мой маленький код CinderProjectApp.cpp, я получаю ошибка: запрошено преобразование ‘boost :: filesystem3 :: path’ в нескалярный тип ‘std :: basic_string, std :: allocator>’ в строке, где я указываю путь к файлу. Поскольку это выглядит синтаксически корректным, мне интересно, что здесь не так с getOpenFilePath.

Если вам нужно увидеть остальную часть кода, пожалуйста, дайте мне знать. Кстати, я поставил свой вопрос Вот.

0

Решение

Благодаря Помощь Павла и Сансумбреллы на forum.libcinder.org я переместил свой try-catch в функцию setup (для эффективности) и использовал объект ci :: fs :: path для хранения пути. Вот моя новая функция setup () (предположим, что все в draw () сверху не изменилось, кроме переупорядочения логики try-catch):

void CinderProjectApp::setup()
{

try
{
ci::fs::path p = getOpenFilePath( "", ImageIo::getLoadExtensions());

if( ! p.empty() )
{ // an empty string means the user canceled
myImage = gl::Texture( loadImage( p ) );
}
}

catch( ... )
{
console() << "Unable to load the image." << std::endl;
}
}
2

Другие решения

Других решений пока нет …