Для меня ответ @ hitzg приводит к тому, что «OverflowError: signed integer больше максимального» в глубинах DateFormatter.
. Посмотрев на мою фреймворк, мои индексы имеют datetime64, а не datetime. Панда преобразует их красиво. Для меня отлично работает:
import matplotlib as mpl
def myFormatter(x, pos):
return pd.to_datetime(x)
[ . . . ]
ax.xaxis.set_major_formatter(mpl.ticker.FuncFormatter(myFormatter))
Поскольку base
создается сначала и еще не "назрел" в derived
. Это не может назвать методы на объекте, когда это не может гарантировать, что объект уже правильно инициализируется.
Вы не должны полиморфно , называют виртуальные методы от конструктора. Вместо этого можно назвать их после конструкции объекта.
Ваш код может быть ре, записанным следующим образом
struct base {
virtual const int value() const {
return 0;
}
base() {
/* std::cout << value() << std::endl; */
}
virtual ~base() {}
};
struct derived : public base {
virtual const int value() const {
return 1;
}
};
int main(void) {
derived example;
std::cout << example.value() << std::endl;
}
Когда производный объект создается, прежде чем тело конструктора производного класса называют, конструктор базового класса должен завершиться. Прежде чем конструктора производного класса вызывают, динамический тип объекта в процессе строительства является экземпляром базового класса и не экземпляром производного класса. Поэтому, когда Вы вызываете виртуальную функцию от конструктора, только переопределения виртуальной функции базового класса можно назвать.
Общее правило - Вы, не вызывают виртуальную функцию от конструктора.
На самом деле существует способ получить это поведение. "Каждая проблема в программном обеспечении может быть решена с уровнем абстракции".
/* Disclaimer: I haven't done C++ in many months now, there might be a few syntax errors here and there. */
class parent
{
public:
parent( ) { /* nothing interesting here. */ };
protected:
struct parent_virtual
{
virtual void do_something( ) { cout << "in parent."; }
};
parent( const parent_virtual& obj )
{
obj.do_something( );
}
};
class child : public parent
{
protected:
struct child_virtual : public parent_virtual
{
void do_something( ) { cout << "in child."; }
};
public:
child( ) : parent( child_virtual( ) ) { }
};