root::setSize
isn't declared pure virtual, which means it must be defined. Presumably, it should be as pure as the other functions:
virtual void setSize(int) = 0;
^^^
If you're interested in the gory details of why you get that particular error: this compiler needs to generate the class's virtual/RTTI metadata somewhere and, if the class declares a non-pure, non-inline virtual function, it will generate it in the same translation unit as that function's definition. Since there is no definition, they don't get generated, giving that error.