2010-11-24 11 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行目はどこにあるのか教えていただけますか? –

+0

私は上の小さなコードの例で26行目をインクルードしました。これはヘッダーファイルのこの関数の宣言です – Chris

+2

空のベクトルへの 'const'リファレンスを使って何をする予定ですか? –

答えて

2

これは、アンドレ・キャノンによって指摘されました:好奇心のうち

、することができますが のstd ::ベクトルのtypedef <のstd ::ペア> EnvironmentBlock。 (名前を変更してください)。 関数宣言の2つのインスタンスを置き換えます。その が解析エラーをクリアするかどうかを確認してください。

私は今、冒頭にtypedef std::vector< std::pair<const wchar_t*, int> > EnvironmentBlock;を宣言していますし、それがMac上でこの問題を解決しないと、コンパイラがちょうどこれらのネストされた適切なタイプとネジの物事に対処することができないようだ - 私はこの問題を上の表示されませんでしたLinuxやWindowsの場合は、私のコンパイラ(GCC 4.2)をアップデートする時が来たかもしれません。

ありがとうございました!

+1

あなたは大歓迎です!私はこれを答えとして投稿しました:-) –

2

エラーのいくつかの#include <utility>

+0

'#include 'は 'std :: pair'を必要とするので' std :: pair'を得るべきだと思います。しかし、私はここで間違ったことは何も見ることができません... –

+0

@Charles: 'std :: pair'は' ' – UncleBens

+0

で定義されています.UUncleBens、私は知っていますが、OPは#と\ '' std :: pair'を使用しなければならないので、OPの問題は、コンパイラが 'std :: pair'の定義を見つけることができない可能性があるとは思いません。 –

0

を試してみて、あなたがsetProcessEnvironmentの2つの定義を持っているという事実に関係します。最後に追加されたintをとるものとwchar_tのベクトルをとるもの(ペアのベクトルではありません)。

私はこれらの2つの問題に焦点を当てています。一部のエラーがコードで生成されているため、残りのコードを参照する必要があります。

+0

はい、この関数には2つの宣言がありますが、最後にintが追加されていません。コンパイラはこれが当てはまるとしか思っていません。この問題を解決する方法は私の質問でした。私が好きなだけ何度も関数をオーバーロードすることができるので、これらの点は明らかではありません。 – Chris

+0

@Chris:そして、どちらもコンパイラのエラーに従って上に投稿したものと一致します。コードの残りの部分をご覧になれますか? – Goz

+0

私はあなたが何を意味するのか分かりませんが、明らかにそれは質問です:なぜコンパイラが関数の宣言を正しく解釈できないのですか?私は実際にはもっとコードを見る必要はなく、問題は解決したと思います(上記のAndreから引用したメッセージをご覧ください)。 – Chris

関連する問題