
[英]How can I access method in object when pointer of object is stored in vector?
[英]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.