Проблема с функцией друга в классе в C ++? - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть класс с 3 полями a, b и c.Я хочу рассчитать объем коробки со сторонами a, b или c.Я хочу сделать это с помощью функции друга.Однако, когда я компилирую программу, Компилятор выдает ошибку Не найдено глобального оператора, который принимает тип 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;
}

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Пара вещей: используйте 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; 
}
0 голосов
/ 26 сентября 2018

В вашем коде 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;
}
...