我的代码有问题。它正在编译,但结果不是我所期待的,虽然我可以找出我的一个问题,但我想知道我是否完全走错了路。
我创建了一个名为test的类:
`
class test{
private:
//have moved the variables to public
//so it's easy to see what's in the vector.
public:
int my_id, my_x,my_y,width, height;
test (int button_id=0, int x=0, int y=0, int width=0, int height=0)
{
my_x = x;
my_y = y;
width = width;
height = height;
}
~test()
{}
void handle_event()
{}
};
`
现在我想用这些对象填充一个向量,并从文本文件中初始化它们。
这是我的方法:
int main(int argc, char const *argv[])
{
//setup file
ifstream inputFile("data.dat");
const char* filename = "data.dat";
std::ifstream inFile(filename);
//init Vector
vector<test> buttons;
int id, x, y, width,height;
int max_buttons = count(istreambuf_iterator<char>(inputFile),istreambuf_iterator<char>(), '\n');
// Make sure the file stream is good
if(!inFile) {
cout << endl << "Failed to open file " << filename;
return 1;
}
//Iterate fields into Vector,
for (id=0 ; id < max_buttons ; id ++)
{
inFile >> x >> y >> width >> height;
buttons.push_back(test(id,x,y,width,height));
cout << std::setw(10) << x << y << width <<height <<endl;
}
cout << endl;
for(int p=0; p < 10; p++) //
cout << buttons[p].my_id << endl;
return 0;
}
我已经将类中的变量移动到了public,因此查看它们会更容易,一旦我发现问题,我会将它们移回去。某些字段正确填充(x和y变量),但每次调用时id都不会增加。我有一个完整的向量,但有无意义的数据。我意识到直接从文本文件解析数据意味着它将采用char格式,并且与整数类型不兼容,但为什么我的ID不会增加?
提前致谢!
这是数据:
23 16 10 19
24 40 10 17
23 16 10 16
25 40 10 14
26 16 10 10
27 40 10 12
27 36 10 11
28 40 10 13
29 34 10 18
27 49 10 10
答案 0 :(得分:0)
您没有在测试类的构造函数中分配my_id。
将此行添加到构造函数中:
my_id = button_id;
答案 1 :(得分:0)
您不是在构造函数中更改对象的id。所以将其更改为以下
test (int button_id=0, int x=0, int y=0, int width=0, int height=0)
{
my_id = button_id;
my_x = x;
my_y = y;
width = width;
height = height;
}
尝试使用警告标志进行编译(例如-Werror
,-Wall
,-pedantic
等等),这样您的代码就会被标记为构造函数中未使用的变量之类的内容在它发生之前你就会知道你的错误!
此外,你不应该通过计算新行的数量来计算文件中的对象数量,这有两个原因是有问题的
你应该循环如下,
while(inFile >> x >> y >> width >> height) { ... }
当文件中缺少4个变量中的任何变量时,这将返回false,因为istream
将进入“false”状态并且循环将自行停止