将std :: set传递给C ++中的方法

时间:2011-12-21 17:29:41

标签: c++ set pass-by-reference std

鉴于以下先决条件:

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&);

编辑:现在这应该更清楚......

我想将setOfA传递给另一个类的另一个函数 - 一切都正常编译。我收到以下链接器问题:

  

'implementation::functionF(std::set<A, std::less<A>, std::allocator<A> >&)'

的未定义引用

只是为了正确 - 无法找到实施,对吧?这不是一个typedef问题,因为一切都很好......我在这里缺少什么?

3 个答案:

答案 0 :(得分:5)

链接器无法找到void functionF(setOfA&);

定义

某处,您需要:

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

稍微详细说明一下,你不应该有一个实现上述代码的implementation2.cpp文件吗?

答案 1 :(得分: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);
}

答案 2 :(得分:1)

我的主要问题是我在错误的命名空间中工作。我同意关闭这个帖子,因为它可能只是帮助我解决我的具体问题 - 另一方面,实现operator<的提示给了我线索。为了完整起见,这是我的operator<实现。

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