【发布时间】:2011-05-15 08:49:34
【问题描述】:
在 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*> >&)
【问题讨论】:
-
您的错误似乎与函数的调用有关。你能告诉我们第 26 行在哪里吗?
-
我在上面的小代码示例中包含了第 26 行 - 这是该函数的头文件声明
-
你打算用
const对空向量的引用做什么? -
出于好奇,你能
typedef std::vector< std::pair<const wchar_t*,int> > EnvironmentBlock;吗(改名字为你喜欢的)。替换函数声明中的两个实例。看看这是否能清除任何解析错误。 -
你在 Mac 上使用什么编译器版本?
标签: c++ windows macos compiler-construction std