如何在类函数中编辑向量的私有成员
How to edit private member of vector in a Class function?
我正在做我的工作,就是输入一些分数并打印出分数、排名和通过/失败。我正在使用C++ 17,编辑我的排名时出错。
我试图将我的向量放在头文件上的"setRankPass"函数中,但它根本不起作用。
头文件
#pragma once
#include <vector>
class Score {
public:
Score(int score)
: _score{ score } {
}
int getScore() {
return _score;
}
int getRank() {
return _rank;
}
bool getPass() {
return _pass;
}
void setRankPass(const std::vector<int>* scores, int size) {
for (int i{ 0 }; i < size; i++) {
_rank = rank[i];
}
double average = static_cast<double>(_rank) / size * 100;
if (average <= 10) {
_pass = true;
}
else {
_pass = false;
}
}
private:
int _score{ 0 };
int _rank{ 0 };
bool _pass{ false };
};
CPP 文件
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include "Score.h"
using namespace std;
int main() {
int enter{ 0 };
int counter{ 0 };
vector<Score> v;
vector<int> s;
while (enter != -1) {
cout << "Enter score(-1 to quit): ";
cin >> enter;
if (enter == -1)
break;
v.push_back(Score(enter));
counter++;
}
int cnt;
vector<int>rank;
for (int i = 0; i < v.size(); i++) {
cnt = 0;
for (int j = 0; j < v.size(); j++) {
if (v[i].getScore() < v[j].getScore()) {
cnt++;
}
}
rank.push_back(cnt + 1);
}
cout << endl;
for (int a{ 0 }; a < v.size(); a++) {
v[a].setRankPass(&rank, counter);
}
for (int k{ 0 }; k < v.size(); k++) {
cout << setw(5) << v[k].getScore() << setw(5) << v[k].getRank() << setw(5) << v[k].getPass() << endl;
}
return 0;
}
我在 _rank = rank[i] 上有一些错误。这是error E0441 There is no argument list for class template "std::rank"
和Error C2065 'rank': Undeclared identifier
.我期望向量秩上的实例将分配给每个_rank。如何解决问题?
此作用域中没有rank
向量变量:
void setRankPass(const std::vector<int>* scores, int size) {
for (int i{ 0 }; i < size; i++) {
_rank = rank[i];
}
double average = static_cast<double>(_rank) / size * 100;
if (average <= 10) {
_pass = true;
}
else {
_pass = false;
}
}
您可以像这样调用该函数:
for (int a{ 0 }; a < v.size(); a++) {
v[a].setRankPass(&rank, counter);
}
但是您在serRankPass
范围内的变量是分数。我假设你的意思是做这样的事情:
void setRankPass(const std::vector<int> &rank, int size) { // Pay attention to & and not * (reference instead of pointer)
_rank = 0; // initialize to 0 and not junk value
for (int i{ 0 }; i < size; i++) {
_rank += rank[i]; // += instead of = (add and not overwrite)
}
double average = static_cast<double>(_rank) / size * 100;
if (average <= 10) {
_pass = true;
}
else {
_pass = false;
}
}
请注意,在此修复之后,您必须更改 main 中的以下行:
v[a].setRankPass(&rank, counter);
到这一行:
v[a].setRankPass(rank, counter);
相关文章:
- C++:从其他类访问结构的私有成员向量
- 访问类成员向量最后一项的正确方法
- 将字符串推送到私有成员向量
- 访问其他类中多个对象的私有成员向量
- 如何在类的构造函数中定义成员向量的大小
- 如何对类成员向量进行排序
- 从向量中擦除元素是否也会擦除元素中存在的所有成员向量
- 尝试从成员函数推送时不维护元素的成员向量
- C++ |无法将项添加到类成员向量
- 如何创建过滤流的成员向量
- 使用大型数据集初始化类成员向量的最有效方法
- 将C 成员向量包裹为Python命令
- 尝试保存到成员向量的连接-一次只保存一个
- 类成员向量上的迭代器未正确取消引用
- 如何在c++11中返回类成员向量
- 初始化构造函数C++中的成员向量
- 将类成员向量的内容复制到另一个向量中,然后将其交换回
- 推送到成员向量时的隔离错误
- 在堆上创建多态对象的数据成员向量
- 将此指针推回专用静态成员向量