繁体   English   中英

如何访问存储在对象中的数组?

[英]How can I access an array stored in an object?

我对C ++很陌生。 我已经尝试了好几天了-毫无疑问,将有一个简单的解决方案,但我一直无法找到(经过大量的搜索)! 我的问题是这样的:

我正在尝试使用一个成员函数创建一个类,该成员函数从文件中读取字符并将它们存储在数组中。 我希望能够创建多个对象(不确定数量-由用户决定),每个对象都有自己的数组,其中填充了从不同文件中提取的字符。 我想我已经做到了。 然后我将如何去访问main中的对象数组?

我正在处理的代码又长又混乱,但遵循以下几行(在这种情况下,char.txt仅包含“ 12345”):

#include <iostream>
#include <fstream>

using namespace std;

class Something{

public:
    void fill_array(char array_to_fill[]){
        char next;
        ifstream input;
        input.open("chars.txt");
        input.get(next);
        while(!input.eof())
        {
            for(int i = 0; i < 6; i++)
            {
            array_to_fill[i] = next;
            input.get(next);
            }
        }
    }
};

int main()
{
    Something* something = new Something[1];
    char array_to_fill[5];

    something->fill_array(array_to_fill);

    //I'd like to be able to access the array here; for example - to cout the array.

    return 0;
}

抱歉,如果a)我的术语错误b)我的代码很垃圾或c)我的问题很愚蠢/没有道理。 另外,我应该补充一点,就是我还没有学习过向量,并且我不应该将它们用于正在编写的程序中。 任何帮助将非常感激。 干杯!

我认为您的问题对于堆栈溢出的格式来说太笼统了,但是在这种情况下,您想要的是创建一个公共成员,或者使用setter和getters创建一个私有成员。

class Something
{
public:
    std::string m_string;
}

int main()
{
    Something A;
    A.m_string = "toto";
    cout << A.m_string;
    return 0;
}

为了方便起见放置一个字符串(您可以使用const char*但是您将必须了解什么范围才能知道何时将无法访问它,并且您还不存在),并且由于我从一部手机。

如果您真的想访问chars本身,请为数组的长度传递一个带有size_t的char *,或者在可能的情况下使用std :: array。

您的课程根本不存储数组。 它只是方法的持有人。 您可能想要这样的类,其中该类的每个实例都包含该数组。 (我将其更改为std::string因为它们更适合使用。)

class Something
{
    private:
        std::string data;

    public:
        void fill_data( const std::string& filename )
        {
             ifstream file( filename );
             file >> data;
             file.close();
        }

        std::string get_data() const
        {
             return data;
        }
}

int main()
{
    std::vector<Something> my_things;

    my_things.push_back( Something() );
    my_things[0].fill_data( "chars.txt" );
    cout << my_things[0].get_data() << std::endl;

    my_things.push_back( Something() );
    my_things[1].fill_data( "another_file.txt" );
    cout << my_things[1].get_data() << std::endl;
}

由于您使用的是C ++,而不是C,因此习惯于编写C ++代码而不是C。( std::vector代替C数组(用于未知长度数组), std::string代替char*等)。

现在,方法fill_array正在创建array_to_fill的本地副本,因此您对array_to_fill任何更改仅会在本地方法中发生。 要更改此设置,请通过指针传递。 这样,指针将被复制而不是整个数组对象。 我没有对此进行测试,但它应该看起来像这样:

void fill_array(char* array_to_fill){
    ...
}

您不需要在main方法中进行任何更改。

要实际访问元素,可以使用[]表示法。 即在主要方法中cout << array_to_fill[0]

编辑:我认为更改应该有效。

暂无
暂无

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

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