0

我对 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) 我的问题是愚蠢的/没有意义,我深表歉意。另外我应该补充一点,我还没有学习矢量,我不应该将它们用于我正在制作的程序。任何帮助将非常感激。干杯!

4

3 回答 3

0

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

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

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

为方便起见,放一个字符串(您可以使用 aconst char*但您必须了解范围是什么才能知道它何时不再可访问并且您还没有完全到达那里)并且可能存在拼写错误,因为我是通过电话输入的。

如果您真的想自己访问字符,请传递一个带有 size_t 的 char* 作为数组长度,或者尽可能使用 std::array 。

于 2013-11-14T00:28:36.380 回答
0

您的课程根本不存储数组。它只是一种方法的持有者。您可能想要这样的东西,其中类的每个实例都包含数组。(我将其更改为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*等)。

于 2013-11-14T00:33:11.320 回答
-1

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

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

您不需要更改 main 方法中的任何内容。

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

编辑:我认为改变应该奏效。

于 2013-11-14T00:26:41.157 回答