鉴于以下先决条件:
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问题,因为一切都很好......我在这里缺少什么?
答案 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;
}