c++ - 错误 - 未在此范围内声明 int 'counter'
问题描述
\main112.cpp In function 'int main()':
63 36 \main112.cpp [Error] 'counter' was not declared in this scope
28 \Makefile.win recipe for target 'main112.o' failed
#include <string>
#include <iostream>
#include <windows.h>
#include <stdlib.h>
using namespace std;
struct Person
{
string name;
string race;
int weight;
void write();
void show();
void check();
};
void Person::show()
{
cout<<"ÔÈÎ: "<<name<<endl;
cout<<"Íîìåð ðåéñà: "<<race<<endl;
cout<<"Âåñ áàãàæà: "<<weight<<endl;
}
void Person::write()
{
cout<<"Ââåäèòå ÔÈÎ: ";
getline(cin,name);
cout<<"Ââåäèòå íîìåð ðåéñà: ";
getline(cin,race);
cout<<"Ââåäèòå âåñ áàãàæà: ";
cin>>weight;
cin.ignore();
}
void Person::check()
{
int counter = 0;
if(weight>10)
{
counter++;
}
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(0, "Russian");
Person* persons=new Person[4];
for (int i = 0; i < 4; i++)
{
persons[i].write();
}
for (int i = 0; i < 4; i++)
{
persons[i].show();
persons[i].check();
}
cout<<"Ñ áàãàæîì áîëüøå 10 êã: "<<counter<<" ÷åëîâåê"<<endl;
delete[] persons;
return 0;
}
程序按照其编码方式工作并且应该工作,没有这个问题
家庭作业:
编写一个处理乘客信息的程序。信息包括: 1) 乘客全名。2) 航班号。3) 行李重量 该程序应允许用户: 1) 从键盘读取数据并显示。2) 计算行李重量超过10公斤的旅客人数
解决方案
熟悉范围的概念。
因为它的作用域是函数Person::check
,counter
只在范围内可见Person::check
。不允许程序的其他部分与之交互。
建议的解决方案:
更改Person::check
(及其声明)以返回布尔值。例子:
bool Person::check() const
{
return weight>10;
}
声明该方法const
以保证此函数不会更改对象。这样做是为了防止错误并允许在常量上使用不应更改对象的函数Person
。这可以防止细微的错误潜入代码。
现在用户可以check
根据自己的Person
行李重量做check
任何他们想做的事情。在 的情况下main
,它想保持计数。任何人都没有理由main
知道它的作用,因此counter
应该由main
. 例如:
int main()
{
...
int counter = 0;
for (int i = 0; i < 4; i++)
{
persons[i].show();
if (persons[i].check())
{
counter++;
}
}
cout<<"Ñ áàãàæîì áîëüøå 10 êã: "<<counter<<" ÷åëîâåê"<<endl;
...
}
旁注:似乎不需要persons
动态分配。考虑更换
Person* persons=new Person[4];
和
Person persons[4];
并删除
delete[] persons;
如果您正在动态分配以准备可变数量的Person
s,则更喜欢使用std::vector
std::vector<Person> persons;
和push_back
或emplace_back
Person
s,因为它们被介绍了。
推荐阅读
- linux - 在 Linux 的嵌入式 Tomcat 服务器中运行 Spring Boot 应用程序
- r - R Shiny:模块和observeEvent和id映射不匹配
- mysql - 识别 MySQL 数据库中未在创建数据库时定义的 FK?
- javascript - 错误:.plugins[3] 只能是二元组或三元组
- r - 使用来自网站的文本创建数据框
- excel - 从指定帐户从 Excel 发送 Outlook 电子邮件
- reactjs - setState 后 useEffect() 完成并具有价值
- keras - 在 K-Fold Cross 验证中,在 keras 中在哪里创建模型对象?
- sql - oracle查询填补同一张表中缺失的数据
- c# - LINQ 方法可用于从 List 中提取单个元素
?