如何将数组传递给函数?使用 C++ 作为 OO 类
How to pass arrays to functions? Using C++ as OO class
我试图更好地了解在C++中使用数组。我正在使用面向对象的方法来执行此操作,所以我确实有一个类。我在一个函数中接受用户输入到字符串数组中,并尝试在另一个函数中打印输出。我在打印或传递输出时遇到一些困难。如何将字符串数组作为参数传递给另一个函数?我知道C++使用指针和地址。调试程序时,我看到只有数组地址传递给打印函数。如何获取要传递给输出函数的实际数组值?我的三个文件在下面...
我的主要...
#include <iostream>
#include "ElectionResults.h"
#include <string>
using namespace std;
void main()
{
string candidates[5];
ElectionResults election;
election.enterElectionData();
election.displayElecionData(candidates);
cin.ignore();
cin.ignore();
}
我的 CPP 文件...
#include "ElectionResults.h"
#include <iostream>
using namespace std;
ElectionResults::ElectionResults(void)
{
}
void ElectionResults::enterElectionData(void)
{
for (int i = 0; i < 5; i++)
{
cout << "Candidiate number " << i + 1 << ": ";
cin >> candidates[i];
}
cout << endl;
}
void ElectionResults::displayElecionData(string candidates[5])
{
for (int i = 0; i < 5; i++)
{
cout << "Candidate name " << i + 1 << ": " << candidates[i] << endl;
}
cout << endl;
}
ElectionResults::~ElectionResults(void)
{
}
我的头文件...
#ifndef ELECTIONRESULTS_H
#define ELECTIONRESULTS_H
#include <string>
using namespace std;
class ElectionResults
{
private:
string candidates[5];
public:
void enterElectionData();
void displayElecionData(string candidates[5]);
ElectionResults(void);
~ElectionResults(void);
};
#endif
谢谢
您可以使用绑定数组参数语法
void displayElecionData(string (&candidates)[5]);
在这种情况下(正如 Ben Voigt 指出的那样),数组不会衰减为指针(即使 [] 只是语法糖),您可以在编译时确保只有 5 个元素的数组可以传递给您的函数。
没有 my_array.size() 或类似的函数,所以你需要将大小存储在某个地方,并将其作为参数发送到每个采用数组的函数中,除非你有非常明确的指定数组。然而,在我看来,有一种更好的方法可以做到这一点。使用 std::vector 或 std::array。
#include <vector>
#include <string>
void doStuff(std::vector<std::string>& lines) {
for(int i = 0; i < lines.size(); ++i) {
//do stuff to lines[i]
}
}
int main() {
std::vector<std::string> my_lines;
doStuff(my_lines);
return 0;
}
我建议你学习如何使用原始数组,然后改用std::vector或std::array。从长远来看,这很可能会减少错误和问题。
如果其他人对数组和指针之间的区别感到好奇,我发现这个答案很有启发性:https://stackoverflow.com/a/1049535/197657
似乎您的实际问题与将数组传递给函数无关,而是您缺少一些基本的东西。
enterElectionData
函数中,您正在将输入读取到类成员candidates
中,但在函数displayElecionData
中,您正在打印参数candidates
,该参数是从main函数传递的,其中从未被赋予任何值。
displayElecionData
函数中candidates
参数隐藏成员candidates
,更具体地说,您可以使用this
关键字访问类成员(例如 this->candidates
)。或者只是删除参数,因为它不是必需的。
如果这是您面临的问题,那么您需要熟悉类的基本概念(实例成员及其作用域等)。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- C++:TypeDef使用元组
- 使用std::multimap迭代器创建std::list
- 从不同线程使用int64的不同字节安全吗
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么在全局范围内使用"extern int a"似乎不行?
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用Google Mock来模拟gettimeofday()
- 如何使用默认参数等选择模板专业化
- 为什么使用 "this" 指针调用派生成员函数?
- 使用新行和不使用新行读取文件
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 如何确定我已使用非编码文件到达 EOF?
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 使用CMake创建QML插件
- 使用strcpy将char数组的元素复制到另一个数组
- 在c++中使用nlohmann从类到json的转换
- 使用指针从C++中的数组中获取最大值
- 使用不带参数的函数访问结构元素