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

Function parameter 'was not declared in this scope' in the header file

本文关键字:范围内 声明 参数 文件 函数      更新时间:2023-10-16

我在其中一个头文件 (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++不是很熟悉,所以任何帮助将不胜感激。

您需要包含标头<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

似乎确实有一个旧的编译器,它不对模板参数声明中>>的符号对使用新语法。因此,您必须在这两个符号之间插入一个空白> >