Я следующее определение класса в C++:Вызов конструктора для инициализации переменных
class foo {
private:
int a,b,c;
foo(); // constructor
void setup(int x, int y);
void some_function_that_changes_a_b_c();
}
foo::foo() {
a = b = c = 0;
}
void foo::setup(int x, int y) {
foo(); // <-- I use this to make sure a,b,c are initialized
a = x;
b = y; // <-- c is left unchanged!
}
void foo::some_function_that_changes_a_b_c() {
// here's some code that changes variables a,b,c
}
А то у меня есть код, который использует этот класс:
foo *a = new foo;
a->setup(1,2);
a->some_function_that_changes_a_b_c();
a->setup(5,7); // <-- HERE IS THE PROBLEM
Проблема заключается в том, что на второй вызов to setup(), он не запускает конструктор foo() для сброса моих значений или a, b, c, поэтому переменная c остается со старым значением, которое было при вызове some_function_that_changes_a_b_c(), я проверил это с помощью отладчика и похоже, что во втором вызове foo() обращается к другому пространству памяти для переменных.
Есть ли способ исправить это?
** Книга: ** https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – Galik
вы должны использовать функцию для инициализации свойств, а не непосредственно делать это в конструкторе – Hacketo
Это уже было рассмотрено здесь - http://stackoverflow.com/questions/14402097/calling-class-constructor-in-member-function-c-solved – raveesh