【问题标题】:Issue with a friend function in a class in C++?C++ 类中的友元函数有问题吗?
【发布时间】:2018-09-26 04:41:51
【问题描述】:

我有一个包含 3 个字段 a、b 和 c 的课程。我想计算边为 a、b 或 c 的盒子的体积。我想用朋友功能做到这一点。然而,当我编译程序时,编译器给出了一个错误No global operator found which take type Box。我想问一下这是为什么?

#include "pch.h"
#include <iostream>
using namespace std;
class Box {
    double a, b, c;
    public:
    Box(double sa, double sb, double sc) {
            a = sa;
            b = sb;
            c = sc;
    }
    friend double calcVolume(Box bx) {
    return bx.a*bx.b*bx.c;

    };

};

int main() {
    Box a(5.67, 6.43, 7.00),b(90,32.76,44.18);
    cout << calcVolume(a)<<endl;


    return 0;
}

【问题讨论】:

  • 代码有错别字,改return bx.abx.bbx*c;返回 bx.a * bx.b * bx.c;
  • 评论#include "pch.h"后无法复制。错误很可能存在于您既不使用也不在此处显示的那段代码中......因此,VTC。

标签: c++ function oop friend


【解决方案1】:

你的代码return bx.a*bx.b*bx*c;有错误,应该是return bx.a*bx.b*bx.c;(最后一个点)

#include <iostream>

using namespace std;

class Box {
    double a, b, c;
    public:
    Box(double sa, double sb, double sc) {
            a = sa;
            b = sb;
            c = sc;
    }
    friend double calcVolume(Box &bx) {
        return bx.a * bx.b * bx.c;
    };
};

int main() {
    Box a(5.67, 6.43, 7.00),b(90,32.76,44.18);
    cout << calcVolume(a)<<endl;
    return 0;
}

【讨论】:

  • 结果是一样的
  • 共享显示的完整错误消息。通常,当您不重载运算符时会出现此错误。
【解决方案2】:

有几件事:不修改参数时使用 const,其次不要使用命名空间 std。现在,这对我有用

#include <iostream> 

class Box 
{ 
    double a; 
    double b; 
    double c; 
public: 
    Box(double ain, double bin, double cin) {a = ain; b = bin; c = cin;} 
    friend double calcVol(const Box& rOther)
    {
        return rOther.a*rOther.b*rOther.c;
    }
}; 

int main() 
{ 
    Box a(14.8, 10.8, 11.01), b(8,5.0,6.2); 
    std::cout<<"vol a :: "<<calcVol(a)<<std::endl; 
    std::cout<<"vol b :: "<<calcVol(b)<<std::endl; 

    return 0; 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多