2014-02-25 18 views
0

我有宣佈在我的頭文件中的一個(C++)函數的一個問題「在此範圍內未聲明」,這是文件的外觀:功能參數在頭文件

#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 

當構建項目(對於XCode中的Mac OSX),我得到''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 

看起來確實是你有一箇舊的compil呃在模板參數聲明中不使用這對符號對的新語法>>。所以你必須在這兩個符號之間插入一個空格> >

+0

我把它添加到標題(因爲你是正確的,它應該包括),但不幸的是它仍然是同樣的問題。 編輯: \t vector bar(); 雖然工作正常。 – DonAlonzo

+0

@ user3351083我更新了我的帖子。 –

+0

我改變了你的想法,但問題依然存在。我試過聲明一個函數std :: vector bar();它工作正常,所以有可能是我用boost :: shared_ptr的方式有問題嗎? – DonAlonzo