得到一个C2628错误

Getting a C2628 error

本文关键字:一个 C2628 错误      更新时间:2023-10-16

考虑以下代码:

#include<iostream>
using namespace std;
class sample
{
    int a;
    int b;
public:
    void setValue()
    {
        a=25;
        b=40;
    }
    friend float mean(sample s)
    {
        return float(s.a+s.b)/2.0;
    }
}
int main()
{
    sample x;
    x.setValue();
    cout<< "mean value:"<< mean(x)<<endl;
    cin.ignore();
    getchar();
    return (0);
}

我期望在编译和运行它时输出:

平均值:32.5

然而,我得到这些编译错误:

1>  frndF.cpp
1>c:usersmgdocumentsvisual studio 2010projectsfrndffrndffrndf.cpp(18): error C2628: 'sample' followed by 'int' is illegal (did you forget a ';'?)
1>c:usersmgdocumentsvisual studio 2010projectsfrndffrndffrndf.cpp(19): error C3874: return type of 'main' should be 'int' instead of 'sample'
1>c:usersmgdocumentsvisual studio 2010projectsfrndffrndffrndf.cpp(27): error C2664: 'sample::sample(const sample &)' : cannot convert parameter 1 from 'int' to 'const sample &'
1>          Reason: cannot convert from 'int' to 'const sample'
1>          No constructor could take the source type, or constructor overload resolution was ambiguous
1>c:usersmgdocumentsvisual studio 2010projectsfrndffrndffrndf.cpp(15): warning C4244: 'return' : conversion from 'double' to 'float', possible loss of data

我做错了什么?

您忘记在类定义的右括号后面加上分号了:

class sample
{
   //code omitted for brevity
}; <------------------- you forgot this

虽然,这与错误或预期输出无关,但您应该通过const引用将参数传递给mean():

friend float mean(sample const & s)
{                      //^^^^^^^ const reference
    return float(s.a+s.b)/2.0;
}

这避免了不必要的参数复制。

需要以;

结束类声明
class sample
{
    // code
};