【发布时间】:2014-07-12 16:22:59
【问题描述】:
我目前正在为大学课程编写光线追踪器。 为了从文件中加载场景,我编写了一个 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 编译和链接所有内容
【问题讨论】:
-
或许
box类有纯虚方法? -
显然,
box是抽象的,即它具有纯虚函数。您不能创建抽象类的实例。
标签: c++ compiler-errors abstract-class