2014-02-25 1 views
0

У меня есть проблема с объявлением функции в одном из моих файлов заголовков (C++), это то, как выглядит файл:параметра Function «не был объявлен в этой области» в файле заголовок

#ifndef MACTRANSFERINCLUDE 
#define MACTRANSFERINCLUDE 
#ifdef USE_MAC 

#include <string> 
#include <boost/shared_ptr.hpp> 

using namespace std; 

boost::shared_ptr<wstring> browseFolder(); 
boost::shared_ptr<vector<wstring>> getFilesInDirRecursiveImplementation(boost::shared_ptr<vector<wstring>> dirs, boost::shared_ptr<vector<wstring>> files); 

#endif 
#endif 

Когда (для Mac OSX в XCode), я понимаю, что «dirs» не был объявлен в этой области ».

Если я объявить функцию

boost::shared_ptr<vector<wstring>> foo(); 

Я получаю ошибку «Вызов функции не может появиться в постоянной экспрессии». Я не очень хорошо знаком с C++, поэтому любая помощь будет оценена.

+0

И вы включаете '' перед тем, как включить файл? –

ответ

0

Вам необходимо включить заголовочные <vector>

#include <vector> 

Может быть, это является причиной ошибки.

Я не вижу большой разницы между декларацией

boost::shared_ptr<wstring> browseFolder(); 

и

boost::shared_ptr<vector<wstring>> foo(); 

Таким образом, компилятор должен выдавать ошибки

«Вызов функции не может появиться в далее константа выражение».

также для первой декларации.

Единственная разница в том, что используется вторая декларация vector, которая не была объявлена. По крайней мере, это не видно, где он объявлен в вашем заголовке.

Также это плохая идея использовать директиву

using namespace std; 

Я хотел бы удалить его и написать

boost::shared_ptr<std::wstring> browseFolder(); 

boost::shared_ptr<std::vector<std::wstring>> getFilesInDirRecursiveImplementation(boost::shared_ptr<std::vector<std::wstring>> dirs, boost::shared_ptr<std::vector<std::wstring>> files); 

Другая причина заключается в том, что, возможно, вам нужно вставить пробел между символами >> Для примера

boost::shared_ptr<std::vector<std::wstring> > dirs 

Кажется, что у вас есть старый компилятор er, который не использует новый синтаксис для пары символов >> в объявлениях аргументов шаблона. Таким образом, вы должны вставить пробел между этими двумя символами. > >

+0

Я добавил его в заголовок (как вы правы, он должен быть включен), но, к сожалению, это все та же проблема. Редактировать: \t vector bar(); работает нормально, хотя. – DonAlonzo

+0

@ user3351083 Я обновил свое сообщение. –

+0

Я изменил его, как вы сказали, но проблема сохраняется.Я попытался объявить функцию std :: vector bar(); и он отлично работает, так что, возможно, что-то не так с тем, как я использую boost :: shared_ptr? – DonAlonzo