私のコードに何か問題があります。それはコンパイルされていますが、結果は私が期待しているものではありません。問題の1つを特定することはできますが、私は完全に間違っているのだろうかと思います。ForループでC++ベクタを反復する
私は、クラスと呼ばれるテスト作成しました:
`
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;
}
私がしたら、私は戻ってそれらを移動します問題を解明したいくつかのフィールドが正しく充填されています(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
私には2つの質問があります:(1)期待される結果はどれですか? (2)*正確に*は実際の結果ですか? –
"なぜ私のIDが増えていないのですか?" 'test'のコンストラクタで' my_id'に代入するのを忘れたので、 –
'width = width;' - コンパイラは、メンバーがではなくパラメータを参照しているとみなします。 'this-> width = width;'を書いたければ、コンストラクタでinitializer-listを使うのが良いでしょう。 – aschepler