【问题标题】:error when creating friend function, "coins does not name a type"创建朋友功能时出错,“硬币没有命名类型”
【发布时间】:2013-02-27 04:26:51
【问题描述】:

我只是想创建一个重载的朋友函数(我说得对吗?)以添加两种不同类型的“硬币”类。 看来我无法正确使用语法。有人能指出我正确的方向吗?

在我的functions.cpp 文件中实现的逻辑:

coins operator+(const coins  &num1, const coins &num2)
{
    int dollars = num1.dollars + num2.dollars;
    int cents = num1.cents + num2.cents;
    return coins(dollars, cents);
}

我的functions.h友元函数声明:

coins operator+(const coins  &num1, const coins &num2);

我的班级文件在coins.h中声明了一个朋友:

friend coins operator+(coins); 

谁能指出我正确的方向?我应该发布完整的代码吗?

【问题讨论】:

    标签: c++ operator-keyword friend


    【解决方案1】:

    你应该把硬币放在里面:

    friend coins operator+(const coins&, const coins&);
    

    (即它有一个左侧操作数和一个右侧操作数)。

    【讨论】:

    • 啊。应该看到的。但是,它仍然告诉我,“在 pa3.cpp:6:0: pa3functions.h:17:2: 中包含的文件中:错误:'coins' 没有在 pa3functions.cpp:4:0 中包含的文件中命名类型: pa3functions.h:17:2:错误:“硬币”没有命名类型 pa3functions.cpp:17:1:错误:“硬币”没有命名类型“
    • @Zane:听起来 pa3functions.cpp 不知道coins
    • 抱歉回来了,但我要为此创建另一个构造函数吗?现在我收到错误 pa3functions.cpp: In function 'coins operator+(const coin&, const coin&)': pa3functions.cpp:21:32: error: no matching function for call to 'coins::coins(int&, int&)'
    • 是的...鉴于您的问题中operator+ 的实现,您确实需要有一个构造函数coins(int dollars, int cents)....
    【解决方案2】:

    错误消息X does not name a type 似乎表明编译器没有将X 识别为一种类型,要么是因为它没有看到定义,要么是因为在它到达之前通过查找找到了其他东西输入。

    检查您是否包含适当的标头,以及您定义运算符的位置是否没有其他符号 coins 在隐藏类型的范围内。另请注意,运算符应与它们所操作的类型在同一命名空间中定义。

    【讨论】:

    • 谢谢你,大卫,实际上我只是在你发帖前一秒才想到这一点。我现在只是想知道是否需要为朋友函数创建一个类构造函数。我不断收到新的错误 pa3functions.cpp: In function 'coins operator+(const coin&, const coin&)': pa3functions.cpp:21:32: error: no matching function for call to 'coins::coins(int&, int&
    • @Zane:不看代码是说不出来的。该错误看起来像operator+ 的实现正在做类似return coins(lhs.value,rhs.value); 的事情(或类似的事情......基本上试图从两个int 左值创建一个新的coins 对象)
    猜你喜欢
    • 2013-04-28
    • 1970-01-01
    • 2011-04-17
    • 2015-11-24
    • 2011-09-24
    • 1970-01-01
    • 2020-07-09
    • 2012-12-04
    相关资源
    最近更新 更多