2011-12-21 5 views
1

方法を設定します。を渡すのstd ::以下prerequisits考えるとC++

shared.h

struct A { 
    int x; 
    int y; 
} 

typedef set<A> setOfA; 

implementation1.cpp

#include "shared.h" 
void Implementation1::someFunction() 
{ 
    //... 
    setOfA setinstance; 
    //... 
    Implementation2* i = new Implementation2(); 
    i->functionF(setinstance); 
} 

implementation2.h

#include "shared.h" 
void Implementation2::functionF(setOfA&); 

EDIT:今、これは明確にする必要があります...

私は別のクラスの別の関数にsetOfAを渡したい - すべてがうまくコンパイルされます。右、実装が見つかりませんでした - 'implementation::functionF(std::set<A, std::less<A>, std::allocator<A> >&)'

未定義参照ちょうどそれが権利を取得するために:私は、次のリンカ問題を取得しますか?すべてがコンパイルされているので、これはtypedefの問題ではありません...私はここで何が欠けていますか?

+0

あなたのタイプ 'A'には省略した'演算子 'がありますか? –

+0

'functionF'を実装しましたか?あなたがプログラムをビルドするときにそれを含むソースファイルを含めていますか? –

+0

@ R.MartinhoFernandesはい、同様に 'operator ==' – Eric

答えて

2

Aのコンパレータを定義していないため、それらのセットは存在しません。

関数を定義:

bool operator<(A& const lhs, A& const rhs) 

、それはstrict weak orderingを実装していることを確認。おそらくこの場合、中:

bool operator<(A& const lhs, A& const rhs) { 
    if (lhs.x != rhs.x) 
     return (lhs.x < rhs.x); 

    return (lhs.y < rhs.y); 
} 
+3

あなたはそうですが、これはコンパイラエラーの代わりにリンカのエラー? –

+0

@ R.MartinhoFernandes:Um、多分。うーん。 –

5

リンカはどこか

void functionF(setOfA&);定義を見つけることができない、次のものが必要です。

void Implementation2::functionF(setOfA&) { 
    ... 
} 

ちょうどこの少し、shouldnについては詳しく説明し上記のコードを実装するimplementation2.cppファイルがありますか?

1

私の主な問題は、間違った名前空間で作業していたことでした。私はこのスレッドを閉じることに同意します。なぜなら、おそらく私の特定の問題を手伝ってくれるからです。一方、operator<を実装するためのヒントは私に手がかりを与えました。完全性のために、ここに私のoperator<の実装があります。

bool operator<(const A& e) const { 
if (x != e.x) 
    return x < e.x; 
else 
    return y < e.y; 
} 
+0

いいですが、メンバー以外の機能が好きです。 –

関連する問題