我对C ++很陌生。我一直试图解决这个问题好几天 - 毫无疑问会有一个简单的解决方案,但我无法找到它(经过多次谷歌搜索)!我的问题是:
我正在尝试使用成员函数创建一个类,该函数从文件中读取字符并将它们存储在数组中。我希望能够创建多个对象(不确定多少 - 由用户决定),每个对象都有自己的数组,其中包含从不同文件中获取的字符。我想我已经设法做到了。那我怎么去主要访问对象的数组?
我正在处理的代码冗长而混乱,但这些内容(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)我的问题是愚蠢/没有意义。此外,我应该补充一点,我还没有学过载体,我不应该将它们用于我正在制作的程序。任何帮助将非常感激。干杯!
答案 0 :(得分:0)
我认为你的问题对于堆栈溢出的格式来说过于笼统,但在这种情况下你想要的是创建一个公共成员,或者用setter和getter创建一个私有成员。
class Something
{
public:
std::string m_string;
}
int main()
{
Something A;
A.m_string = "toto";
cout << A.m_string;
return 0;
}
为方便起见放一个字符串(你可以使用const char*
,但你必须明白什么是不知道何时无法访问的范围而且你还没有完全存在)并且可能存在错别字因为我是用手机输入的。
如果你真的想要访问字符本身,请传递一个char *,其中size_t为数组长度,或者尽可能使用std :: array。
答案 1 :(得分: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*
等等)。
答案 2 :(得分:-1)
现在方法fill_array
正在创建array_to_fill
的本地副本,因此您对array_to_fill
所做的任何更改只会在本地方法中发生。要更改此设置,请按指针传递。这样就可以复制指针而不是整个数组对象。我没有对此进行测试,但看起来应该更像这样:
void fill_array(char* array_to_fill){
...
}
您无需在主方法中更改任何内容。
要实际访问元素,您可以使用[]
表示法。即主要方法中的cout << array_to_fill[0]
。
编辑:我认为改变应该有效。