В настоящее время я пишу raytracer для университетского класса. Чтобы загрузить сценарии из файлов, я написал sdfloader для чтения файлов sdf и создания для них сцен.
если теперь я хочу скомпилировать загрузчик, я получаю следующую ошибку:
rc/sdf_loader.cpp: In member function 'void SDFloader::add_shape(std::istringstream&)':
src/sdf_loader.cpp:95:58: error: invalid new-expression of abstract class type 'box'
&scene_.materials[mat]));
^
Я попытался найти решение, но не смог.
Класс sdf_loader выглядит следующим образом:
class SDFloader {
public:
SDFloader();
~SDFloader();
Scene const& scene() const;
void read(std::string file);
private:
void add_material(std::istringstream&);
void add_shape(std::istringstream&);
void add_light(std::istringstream&);
void add_camera(std::istringstream&);
void apply_transformation(std::istringstream&);
private:
Scene scene_;
};
в моей реализации загрузчика sdf я написал метод read():
void SDFloader::add_shape(std::istringstream& iss) {
std::string name;
iss >> name;
if(name == "box") {
double x1,y1,z1,x2,y2,z2;
std::string mat;
iss >> name >> x1 >> y1 >> z1 >> x2 >> y2 >> z2 >> mat;
scene_.shapes.insert(new box(point(x1,y1,z1),
point(x2,y2,z2),
name,
&scene_.materials[mat]));
}
и для каждой другой формы одни и те же звонки.
Где проблема в моем коде? Я действительно этого не вижу
Я использую g++-4.9 - std=c++0x
чтобы скомпилировать и связать все