我正在构建一个C ++项目,我想创建一个全局自定义对象。我创建了一个名为Material的自定义类。
rt.h
template<typename T>
class Material
{
public:
Vec3<T> ka, kd, ks, kr;
T sp, transparency, reflectivity;
Material( ) {
ka = Vec3<T>(0);
kd = Vec3<T>(0.0, 0.0, 0.0);
ks = Vec3<T>(0.0, 0.0, 0.0);
sp = 0.0;
kr = Vec3<T>(0.0, 0.0, 0.0);
reflectivity = 0.0;
transparency = 0.0;
}
};
在我的rt.cpp文件的顶部,我有以下内容。
#include <"rt.h">
Material<float> currentMaterial();
稍后我调用currentMaterial并收到错误
raytracer.cpp:294:3: error: base of member reference is a function; perhaps you meant to call it with no arguments?
currentMaterial.ka = Vec3<float>(kar, kag, kab);
我打电话的时候:
currentMaterial.ka = Vec3<float>(kar, kag, kab);
由于
答案 0 :(得分:4)
Material<float> currentMaterial();
看起来像编译器的函数声明。像这样声明你的变量:
Material<float> currentMaterial;
答案 1 :(得分:1)
编译器对待
Material<float> currentMaterial();
如
Material<float> currentMaterial(void);
一个函数声明,带有void参数和Material返回类型。
所以你应该写
Material<float> currentMaterial;
代替。