在Mac OS下编译代码时遇到问题。我的头文件中的这个函数声明显然会导致一些错误(但它在Windows下运行正常):
#include <string>
#include <vector>
#include <map>
#ifdef WIN32
#include <windows.h>
#endif
[...]
int setProcessEnvironment(
const wchar_t * procName,
const wchar_t * appName = NULL,
const wchar_t * workingDir = NULL,
const wchar_t * cmdArgs = NULL,
const std::vector< std::pair<const wchar_t *, int> > &systemEnvVars = std::vector< std::pair<const wchar_t *, int> >()
);
看起来编译器不喜欢我的对的输入 - 也许我错过了一些包含或者这里有什么问题?
我也不完全理解此错误消息的最后一行,因为我的函数描述实际上与此错误中的函数描述看起来非常不同...
我开始认为它可能与默认初始化有关,但Mac和Windows编译器之间有什么区别?
26: error: expected ‘,’ or ‘...’ before ‘>’ token
26: error: wrong number of template arguments (1, should be 2)
/usr/include/c++/4.2.1/bits/stl_pair.h:68: error: provided for ‘template<class _T1, class _T2> struct std::pair’
26: error: template argument 1 is invalid
26: error: template argument 2 is invalid
26: error: default argument missing for parameter 6 of ‘int SysProcManager::setProcessEnvironment(const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*, const std::vector<std::pair<const wchar_t*, int>, std::allocator<std::pair<const wchar_t*, int> > >&, int)’
159: error: prototype for ‘int SysProcManager::setProcessEnvironment(const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*, const std::vector<std::pair<const wchar_t*, int>, std::allocator<std::pair<const wchar_t*, int> > >&)’ does not match any in class ‘SysProcManager’
26: error: candidates are: int SysProcManager::setProcessEnvironment(const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*, const std::vector<std::pair<const wchar_t*, int>, std::allocator<std::pair<const wchar_t*, int> > >&, int)
138: error: int SysProcManager::setProcessEnvironment(const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*, const std::vector<const wchar_t*, std::allocator<const wchar_t*> >&)
答案 0 :(得分:2)
尝试#include <utility>
答案 1 :(得分:2)
出于好奇,你能打字吗? 的std ::矢量&lt; std :: pair&gt; EnvironmentBlock; (根据自己的喜好更改名称)。 替换你的两个实例 功能声明。看看是否这样 清除任何解析错误。
我现在正在声明typedef std::vector< std::pair<const wchar_t*, int> > EnvironmentBlock;
开头,它确实在Mac上解决了这个问题,似乎编译器无法正确处理这些嵌套类型并搞砸了事情 - 我没有看到这个问题在Linux或Windows上,也许是时候更新我的编译器(GCC 4.2)。
谢谢Andre!
答案 2 :(得分:0)
有几个错误与你有2个setProcessEnvironment定义的事实有关。一个在结尾处作为添加的int而另一个在wchar_t的向量中获取(不是对的向量)。
我首先关注这两个问题。如果失败,我们需要看到其余的代码,因为有些错误是由我们看不到的代码生成的。