得到一个C2628错误
Getting a C2628 error
考虑以下代码:
#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
};
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '