2010-11-24 66 views
2

在Mac OS下编译我的代码时遇到问题。在我的头文件,该函数的声明显然会导致一些错误(它在Windows下工作得很好,虽然):编译mac/linux时std :: pair出错

#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*> >&) 
+1

您的错误似乎与该函数的调用有关。你能告诉我们26号线在哪里吗? – 2010-11-24 21:11:52

+0

我在上面的小代码示例中包含了第26行 - 它是这个函数的头文件声明 – Chris 2010-11-24 21:13:33

+2

你打算如何用一个对空向量的const引用做什么? – 2010-11-24 21:19:53

回答

2

这指出了通过安德烈·卡伦:

出于好奇,你能的typedef 的std ::矢量<的std ::对> EnvironmentBlock; (更改名称以符合您的喜好)。 替换 函数声明中的两个实例。看看 是否清除任何分析错误。

我现在宣布typedef std::vector< std::pair<const wchar_t*, int> > EnvironmentBlock;在开始和它确实解决了苹果在这个问题上,似乎编译器就不能处理这些嵌套类型正确和螺钉的东西了 - 我没有看到这个问题Linux或Windows,所以也许是时候更新我的编译器(GCC 4.2)了。

谢谢安德烈!

2

尝试#include <utility>

0

几个错误涉及到你有setProcessEnvironment 2所定义的事实。一个需要在末尾添加一个int,另一个需要wchar_t的向量(不是对的向量)。

我将重点放在这两个问题上。否则我们需要查看其余的代码,因为有些错误是由我们看不到的代码生成的。