头文件中的函数参数'未在此范围中声明'

时间:2014-02-25 11:56:05

标签: c++ scope header-files

我在我的一个头文件(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 ++不太熟悉,所以任何帮助都会受到赞赏。

1 个答案:

答案 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

看起来你确实有一个旧的编译器在模板参数声明中不使用符号对>>的新语法。因此,您必须在这两个符号> >

之间插入一个空格