我已经查看过有关此问题的多个SO问题和论坛帖子,但所有帖子都与指针(不是类实例)或检查等价(不是标识)相关。现在我使用==
上的this
运算符和包含其他类对象的变量。它有效,但Eclipse正在吐出警告no match for operator==(operand types are Class* and Class
以下是相关文件:
#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;
}
#pragma once
class Class {
public:
Class();
bool sameInstance(Class);
};
#include "Class.h"
Class::Class() {
}
bool Class::sameInstance(Class c) {
return this == c;
}
编辑:我转换为类指针:
#pragma once
class Class {
public:
Class();
bool sameInstance(Class*);
};
#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());
。
答案 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()
不会修改其参数。