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

发布于 2024-12-22 06:07:57 字数 873 浏览 3 评论 0 原文

考虑到以下先决条件:

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, std::allocator>&)'

只是为了正确 -找不到实现,对吗?这不可能是 typedef 问题,因为一切都编译得很好......我在这里缺少什么?

Given the following prerequisits:

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: now this should be clearer...

I want to pass a setOfA to another function of a different class - everything is compiling just fine. I get the following linker problem:

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

Just to get it right - the implementation could not be found, right? This cannot be a typedef problem, because everything compiles just fine... What am I missing here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

谎言月老 2024-12-29 06:07:57

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

,在某个地方,您需要:

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

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

The linker is unable to find the definition of void functionF(setOfA&);

Somewhere, you need:

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

Just to elaborate on this slightly, shouldn't you have an implementation2.cpp file that implements the above code?

流心雨 2024-12-29 06:07:57

您没有为 A 定义比较器,因此它们的集合不能存在。

定义一个函数:

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

并确保它实现严格的弱排序;在这种情况下,可能:

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

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

You didn't define a comparator for A, so a set of them can't exist.

Define a function:

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

and ensure that it implements a strict weak ordering; in this case, probably:

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

    return (lhs.y < rhs.y);
}
北方的韩爷 2024-12-29 06:07:57

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

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

My major problem was that I was working in the wrong namespace. I agree to close this thread, because it's probably just helping me with my specific problem - on the other hand the hint to implement the operator< gave me the clue. For the sake of completeness, here's my operator< implementation.

bool operator<(const A& e) const {
if (x != e.x)
  return x < e.x;
else
  return y < e.y;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文