收到 C2628 错误

1 c++ visual-c++

考虑以下代码:

#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);
}
Run Code Online (Sandbox Code Playgroud)

我希望在尝试编译和运行它时输出:

平均值:32.5

但是,我得到了这些编译器错误:

1>  frndF.cpp
1>c:\users\mg\documents\visual studio 2010\projects\frndf\frndf\frndf.cpp(18): error C2628: 'sample' followed by 'int' is illegal (did you forget a ';'?)
1>c:\users\mg\documents\visual studio 2010\projects\frndf\frndf\frndf.cpp(19): error C3874: return type of 'main' should be 'int' instead of 'sample'
1>c:\users\mg\documents\visual studio 2010\projects\frndf\frndf\frndf.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:\users\mg\documents\visual studio 2010\projects\frndf\frndf\frndf.cpp(15): warning C4244: 'return' : conversion from 'double' to 'float', possible loss of data
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

Naw*_*waz 5

您忘记了类定义的右括号后的分号:

class sample
{
   //code omitted for brevity

}; <------------------- you forgot this
Run Code Online (Sandbox Code Playgroud)

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

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

这避免了不必要的参数副本。

  • @jeet.mg:为了将来参考,下次出现问题时尝试阅读错误消息。有时,它甚至会告诉您可能出了什么问题(例如“错误 C2628:'sample' 后跟 'int' 是非法的(**您是否忘记了 ';'?**)”)。在出现一些编译器错误后不要轻易放弃。 (4认同)
  • 我读过……但是,我只检查了语句。m frm java 背景。所以没想到;下课以后 (2认同)
  • @jeet.mg:所以你基本上忽略了编译器告诉你的。你惊讶地发现它不起作用?您应该做的第一件事是 (1) 聆听编译器,而不是您对语言如何工作的先入之见,以及 (2) 意识到 C++ 与 Java 完全不同。获取一本 [好的 C++ 介绍书](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) 并学习正确的 C++。这样就不那么令人沮丧了。 (2认同)