我在我的一个头文件(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
看起来你确实有一个旧的编译器在模板参数声明中不使用符号对>>
的新语法。因此,您必须在这两个符号> >