我正在尝试创建对象数组并显示它,但是由于某种原因,它给出了错误的输出结果 我认为我使用新运算符的方式不正确,但是我不确定出什么问题
#include<bits/stdc++.h>
using namespace std;
class X {
string s;
int b;
public:
void set(string s,int b ) {
this->s = s;
this->b = b;
}
void display() {
cout << this->s << ' ' << this->b << '\n';
}
};
int main()
{
int t;
cin >> t;
for (int i = 0; i < t; i++) {
int n;
cin >> n;
X* a = new X[n];
for (int j = 0; j < n; j++) {
string s; int b;
cin >> s >> b;
a[i].set(s, b);
}
for (int i = 0; i < n; i++) {
a[i].display();
}
}
}
输入: 1个 3 阿比1 omkar 2 礼仪3
输出: 礼仪3 0 0
答案 0 :(得分:1)
您必须实例化对象数组中的每个对象。
并尝试使用getline
函数来获取字符串的输入。
#include<bits/stdc++.h>
using namespace std;
class X {
string s;
int b;
public:
void set(string s,int b ) {
this->s = s;
this->b = b;
}
void display() {
cout << this->s << ' ' << this->b << '\n';
}
};
int main()
{
int t;
cin >> t;
for (int i = 0; i < t; i++) {
int n;
cin >> n;
X *a[n];
for (int j = 0; j < n; j++) {
a[j] = new X;
string s; int b;
cin >> s >> b;
a[j]->set(s, b);
}
for (int i = 0; i < n; i++) {
a[i]->display();
}
}
}
希望这可能会有所帮助:)
答案 1 :(得分:0)
错误在于数组的初始化。您将X* a = new X[n];
用作指向类X的指针的初始化。要进行正确的初始化,必须使用以下几行:
X* a[n];
for(int k = 0 ; i < n ; ++i){
a[k] = new X;
}
注意指针的使用。可能您不需要它。如果不需要它,可以使用以下行来初始化数组:X a[n];
现在,您可以使用不带指针的数组,因此可以用-。(point)替换->(arrow)来调用函数或访问类的变量。
另一个提示:在显示功能中或一般在std::endl
中使用'\n'
代替std::cout
。