2010-11-24 67 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的向量(不是對的向量)。

我將重點放在這兩個問題上。否則我們需要查看其餘的代碼,因爲有些錯誤是由我們看不到的代碼生成的。