2010-04-20 156 views
1

我没有看到任何解决我的特定代码问题的东西。如何调用布尔函数

我在班上有一个bool函数;在布尔函数被命名为:

bool Triplet::operator ==(const Triplet& operand)const { 
    if((data[0] == operand.data[0]) && 
      (data[1] == operand.data[1]) && 
      (data[2] == operand.data[2])) 
     return true; 
     ... 

,我试图把它称之为主,但有刚刚起步的呼叫权限问题。显然,如果我在文字中忽略了任何内容,它会给出一个错误,说明我的代码太少,如果我尝试使用该函数的整个措辞,则会出现我需要分号的错误,但我已经有了一个在呼叫结束时出现分号,所以我知道其他事情是错误的,我根本无法弄清楚什么是错的! 任何帮助,将不胜感激!

在此先感谢。

+6

发布不工作的代码和实际的编译器错误将有所帮助。 – 2010-04-20 20:20:35

+0

是的,它是在主要的答案之一的答案。下面是函数下部分码: 布尔三重::运算符==(常量三元组操作数)常量 { 如果((数据[0] == operand.data [0])&& (数据[ 1] == operand.data [1])&& (data [2] == operand.data [2])) return true; .... 但我的PROLEM是主要的:我想在Main中调用上述内容。 我会尝试一些我从你们那里收到的回复,看看它们中的任何一个是否可以用于上述代码。 谢谢大家的帮助! – Gerri 2010-04-20 20:38:47

+3

由于'main'中的代码不起作用,所以您应该发布代码。这就是要求的。 – Troubadour 2010-04-20 20:54:57

回答

8

这是一个C++运算符重载,它的设计,因此它可以改变正常运营的行为:

Triplet a, b; 
if (a == b) // calls Triplet::operator==() 

如果你真的想,你可以通过名字来称呼操作:

if (a.operator==(b)) 
+7

除了它会是'a.operator ==(b)'。 – Troubadour 2010-04-20 20:27:44

+0

谢谢,我用Triplet a;三胞胎b;等等,它的工作。非常感谢你的回答。我真的很感激它! – Gerri 2010-04-20 20:56:24

+0

@Troubadour:哦!教我后10分钟后唤醒:) – 2010-04-21 03:17:20

11

可以使用==调用它(这是运算符重载做的东西;它重载操作者的意思):

if (a.operator==(b)) //< also calls your operator== 

Triplet a; 
Triplet b; 

if (a == b) //< calls your operator== 

您也可以使用函数调用语法调用它

但你通常不想或不需要那样做。

您可能需要这样做的一种情况是,如果由于某种原因,您的操作员模板的模板参数无法从参数中推导出来(这很少见operator==,但我看过用于operator[]之前)。

+0

谢谢,我用Triplet a;三胞胎b;等等,它的工作。非常感谢你的回答。我真的很感激它! – Gerri 2010-04-20 20:53:35

2

bool只是返回类型。它与所谓的功能无关。正如在詹姆斯的例子中,这个函数是一个操作符,因此您将像使用正常语法那样使用操作符来调用它。

+0

谢谢,我用Triplet a;三胞胎b;等等,它的工作。非常感谢你的回答。我真的很感激它! – Gerri 2010-04-20 20:57:33