在下面的代码中,我有一个结构数组。
现在,我想存储用户输入到hello[1].fname
的同名文本文件。我该如何更改我的代码?
struct customer{
string fname;
string lname;
int age;
} ;
int main()
{
int x;
ofstream client;
cout<<"number ff family members?";
cin>>x;
customer hello[x];
for(int i=0;i<x;i++)
{
cin>>hello[i].fname;
cin>>hello[i].lname;
cin>>hello[i].age;
}
**client.open(hello[1].fname.text);**
if(!client)
{
cout<<"error";
}
}
答案 0 :(得分:4)
C ++不允许在C语言中使用所谓的可变长度数组(VLA),所以您的代码
cin>>x;
customer hello[x];
不是合法的C ++。请改用std::vector<customer>
。
x
和i
的类型应为std::size_t
而不是int
,因为int
可能不足以容纳所有可能的对象大小/索引
声明并定义变量的实际使用位置。代替
ofstream client;
// numerous lines of code
client.open( /*... */ );
做
// numerous lines of code
ofstream client( /* ... */ ); // use the constructor instead of open()
最后但并非最不重要:
client.open(hello[1].fname.text);
customer::fname
类型为std::string
,它没有名为text
的成员。只需使用
ofstream client(hello[1].fname);
或
ofstream client(hello[1].fname.c_str());
如果必须使用不支持std::ofstream
且仅使用std::string
的{{1}}的构造函数的标准库实现,则为
。
PS:您知道C和C ++中的数组从索引0开始吗?奇怪的是,您使用const char *
作为文件名。