繁体   English   中英

如何将数组传递给函数? 使用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 ,该参数candidates从主函数传递,从而从未给出任何值。

displayElecionData函数中candidates参数是隐藏成员candidates ,更具体地说,您可以使用this关键字访问类成员(例如this->candidates )。 或者只是删除参数,因为它不是必需的。

如果这是您面临的问题,那么您需要熟悉类的基本概念(实例成员及其范围等)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM