检查两个类是否相等(标识)

时间:2016-09-13 16:29:52

标签: c++

我已经查看过有关此问题的多个SO问题和论坛帖子,但所有帖子都与指针(不是类实例)或检查等价(不是标识)相关。现在我使用==上的this运算符和包含其他类对象的变量。它有效,但Eclipse正在吐出警告no match for operator==(operand types are Class* and Class以下是相关文件:

Main.cpp的

#include <iostream>
#include "Class.h"
using namespace std;

int main() {
    Class a;
    Class b;
    cout << "Are a & b the same instance? " << a.sameInstance(b) << endl;
    return 0;
}

Class.h

#pragma once

class Class {
public:
    Class();

    bool sameInstance(Class);
};

Class.cpp

#include "Class.h"

Class::Class() {

}

bool Class::sameInstance(Class c) {
    return this == c;
}

编辑:我转换为类指针:

更新了Class.h

#pragma once

class Class {
public:
    Class();

    bool sameInstance(Class*);
};

更新了Class.cpp

#include "Class.h"

Class::Class() {

}

bool Class::sameInstance(Class* c) {
    return this == c;
}

但我不确定如何将b作为Main.cpp中的指针传递。保持不变,它给了我错误Invalid arguments Candidates are bool sameInstance(Class*)

Edit2:我放了一个&amp;在变量名称之前将其转换为指针。因此,a.sameInstance(b)不是a.sameInstance(&b),而是ko.bindingHandlers.test = { init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { }, update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { var templateId = ko.unwrap(valueAccessor()); console.log(templateId); ko.renderTemplate(templateId, viewModel, {}, element, "replaceChildren"); } }; var viewModel = function() { this.bob = { name: ko.observable("bob") }; this.numberOfClicks = ko.observable(0); this.registerClick = function(ctx) { console.log(ctx); this.numberOfClicks(this.numberOfClicks() + 1); }; }; ko.applyBindings(new viewModel());

1 个答案:

答案 0 :(得分:2)

sameInstance方法中,必须通过引用或指针传递参数。传递值不起作用,因为该函数将在对象的副本上运行,这显然是一个不同的实例。

参考:

bool Class::sameInstance(const Class& c) {
    // Take address of c to get a pointer which can be compared to this
    return this == &c;
}

// main()
cout << "Are a & b the same instance? " << a.sameInstance(b) << endl;

通过指针:

bool Class::sameInstance(const Class* p) {
    // p is already a pointer which can be compared to this
    return this == p;
}

// main()
// Take the address of b to pass to sameInstance()
cout << "Are a & b the same instance? " << a.sameInstance(&b) << endl;

通过引用传递是更好的惯用语C ++。

在这两种情况下,您都应该使用const,因为sameInstance()不会修改其参数。