C++ 非标准语法;使用'&';创建指向成员C++;
我在运行我的一小段代码时遇到问题。 我有一个从用户输入读取温度的向量。我想稍微处理一下数据。给出哪一天(热天、夏日等)以及哪一天最热。 但每次我想用函数maxNumber获得最高温度时,我都会得到两个错误,我不明白:C++ 非标准语法;使用'&';创建指向成员C++;,c++,function,pointers,vector,C++,Function,Pointers,Vector,我在运行我的一小段代码时遇到问题。 我有一个从用户输入读取温度的向量。我想稍微处理一下数据。给出哪一天(热天、夏日等)以及哪一天最热。 但每次我想用函数maxNumber获得最高温度时,我都会得到两个错误,我不明白: non-standard syntax; use '&' to create a pointer to member "! =": Function overload cannot be resolved 请帮忙!非常感谢 代码: #包括 #包括 s
non-standard syntax; use '&' to create a pointer to member
"! =": Function overload cannot be resolved
请帮忙!非常感谢
代码:
#包括
#包括
std::string klimaTag(浮点a){
如果(a>=25和a<30){
返回“Sommertag”;
}
如果(a>=30和a<35)为else{
返回“Heißer标签”;
}
如果(a>=35),则为else{
返回“Wüstentag”;
}
否则{
返回“Normaltag”;
}
}
浮点最大数(标准::向量&a){
浮动电流_max=0;
for(int i=a.begin;i!=a.end;i++){
如果(a.at(i)>当前最大值){
电流_max=a.at(i);
}
返回电流_max;
}
}
int main()
{
病媒温度;
浮动电流温度;
对于(int i=0;i<5;i++){
std::couta.end
指函数地址,需要使用a.end()调用函数本身
因此,对非标准语法的抱怨,就好像你想取你可以调用的函数地址&a.end
。与a.begin
相同a.end
指的是函数地址,你需要用a.end()调用函数本身
因此,对非标准语法的抱怨,就好像你想获取你可以调用的函数地址&a.end
。与a.begin
一样,要使用你描述的for循环,你需要int i=0;i
。此外,return
语句位于maxNumber中的for循环内。这不是您想要的(它在第一个循环中退出),请将其置于外部
Begin和end实际上是使用迭代器的方法。要使用它们,您应该对循环进行一些更改。要像您所描述的那样使用for循环,您需要int i=0;i
。而且return
语句位于maxNumber中的for循环内。这不是您想要的(它在第一个循环中退出),把它放在外面
Begin和end实际上是使用迭代器的方法。要使用它们,您应该稍微更改循环。Begin
和end
是需要像函数一样调用的函数:Begin()
和end()
。
但是,可以使用基于范围的循环,如:
float maxNumber(标准::向量&a){
浮动电流_max=0;
用于(自动常数i:a){
如果(i>当前最大值){
电流_max=i;
}
}
返回电流_max;
}
请注意我把返回语句放在哪里。它在for循环之外。begin
和end
是需要像函数一样调用的函数:begin()
和end()
。
但是,可以使用基于范围的循环,如:
float maxNumber(标准::向量&a){
浮动电流_max=0;
用于(自动常数i:a){
如果(i>当前最大值){
电流_max=i;
}
}
返回电流_max;
}
请注意我把return语句放在哪里了。它在for循环之外。首先begin()
和end()
是方法,所以你会得到这个错误,因为你试图引用一个函数,所以它应该需要一个地址操作符
第二个是begin()
和end()
返回一个迭代器,而不是索引,您正在清除试图访问类似索引的内容
第三件事是你总是在第一个周期后返回,因为你的返回在它里面,应该在外面
要正确循环,数组就足以使用for循环范围
float maxNumber(std::vector<float> &a) {
float current_max = 0;
for(const auto& element : a) {
if(element > current_max){
current_max = element;
}
}
return current_max;
}
float maxNumber(标准::向量&a){
浮动电流_max=0;
用于(常量自动和元素:a){
如果(元素>当前最大值){
当前_max=元素;
}
}
返回电流_max;
}
如果你想用老办法,你可以一直这样做
float maxNumber(std::vector<float> &a) {
float current_max = 0;
for(int i=0; i<a.size(); ++a) {
if(a.at(i) > current_max){
current_max = a.at(i);
}
}
return current_max;
}
float maxNumber(标准::向量&a){
浮动电流_max=0;
用于(int i=0;i当前_max){
电流_max=a.at(i);
}
}
返回电流_max;
}
首先,begin()
和end()
是方法,因此您会遇到该错误,因为您试图引用函数,因此它应该需要一个地址运算符
第二个是begin()
和end()
返回一个迭代器,而不是索引,您正在清除试图访问类似索引的内容
第三件事是你总是在第一个周期后返回,因为你的返回在它里面,应该在外面
要正确循环,数组就足以使用for循环范围
float maxNumber(std::vector<float> &a) {
float current_max = 0;
for(const auto& element : a) {
if(element > current_max){
current_max = element;
}
}
return current_max;
}
float maxNumber(标准::向量&a){
浮动电流_max=0;
用于(常量自动和元素:a){
如果(元素>当前最大值){
当前_max=元素;
}
}
返回电流_max;
}
如果你想用老办法,你可以一直这样做
float maxNumber(std::vector<float> &a) {
float current_max = 0;
for(int i=0; i<a.size(); ++a) {
if(a.at(i) > current_max){
current_max = a.at(i);
}
}
return current_max;
}
float maxNumber(标准::向量&a){
浮动电流_max=0;
用于(int i=0;i当前_max){
电流_max=a.at(i);
}
}
返回电流_max;
}
Try begin()和end()with()…Try begin()和end()with()…当然,std::max_元素
为您完成大部分工作+1.在for
循环中,您知道i
是一个有效的索引,因为您是这样编写的。在(i)
@PeteBecker处使用不需要额外的开销,我只是使用了他相同的语法是的,我知道。这还是太过分了。当然,std::max_element
为您完成了大部分工作+1.在for
循环中,您知道i
是一个有效的索引,因为您是在