模板化成员 class 地址的奇怪错误
Bizarre error on address of class with templated member
我在修改我的 class 结构时遇到了一个奇怪的错误,我无法用更简单的 classes 重现该错误。
情况:
我决定让 class Input
有一个指向 object 的引用(一个普通的旧指针),由用户的键输入操作,Camera
.之前我通过 Input
的构造函数链接它们:Input in(&cam);
但是在 Camera 中包含一个模板化成员之后:Buffer<Layout> buffer
我的整个主要功能变得疯狂。
以前这没问题:
Camera cam();
Input in(&cam);
cam.setProj(glm::mat4(1.0f)); // Example of function call
headers当然在单独的文件中,实现在.cpp-files.
Input
有一个成员 Camera *cam
并且 Input
的构造函数是:
Input::Input(Camera *camera){
this->cam = camera;
}
问题:
已经不行了。错误信息是:
Input::Input(Input &&): cannot convert argument 1 from
'Camera(__cdecl *)(void)' to 'Camera *'
此外,每次尝试调用 Camera
的函数都会出现两个额外的错误:expression must have class type
和 left of '.func' must have class/struct/union
.
尝试创建一个最小示例:
Tl;dr:没完全做到。或者至少问题不直接在于使用模板成员获取 class 的地址。以下代码有效。
#include <stdio.h>
#include <stdlib.h>
template <typename T>
class Member{
public:
Member(T variable):var(variable){};
T var;
};
class Owner{
public:
Owner(int m):member(m){};
Member<int> member;
};
class Referencer{
public:
Referencer(Owner *o){this->op = o;};
Owner *op;
};
int main(){
Owner o(1);
Referencer r(&o);
printf("%d\n", r.op->member); // Output is 1.
return 0;
}
由于上面的示例有效,我不确定它是否真的影响了拥有模板成员的情况。我真的迷失了这个。非常感谢任何帮助!
Camera cam();
这是一个简单的函数声明。您声明一个返回 Camera
并接受零参数的函数。你的 MSVC 编译器抱怨它!
Input::Input(Input &&): cannot convert argument 1 from 'Camera(__cdecl *)(void)' to 'Camera *'
只需使用:
Camera cam;
并调用默认构造函数。
我在修改我的 class 结构时遇到了一个奇怪的错误,我无法用更简单的 classes 重现该错误。
情况:
我决定让 class Input
有一个指向 object 的引用(一个普通的旧指针),由用户的键输入操作,Camera
.之前我通过 Input
的构造函数链接它们:Input in(&cam);
但是在 Camera 中包含一个模板化成员之后:Buffer<Layout> buffer
我的整个主要功能变得疯狂。
以前这没问题:
Camera cam();
Input in(&cam);
cam.setProj(glm::mat4(1.0f)); // Example of function call
headers当然在单独的文件中,实现在.cpp-files.
Input
有一个成员 Camera *cam
并且 Input
的构造函数是:
Input::Input(Camera *camera){
this->cam = camera;
}
问题:
已经不行了。错误信息是:
Input::Input(Input &&): cannot convert argument 1 from 'Camera(__cdecl *)(void)' to 'Camera *'
此外,每次尝试调用 Camera
的函数都会出现两个额外的错误:expression must have class type
和 left of '.func' must have class/struct/union
.
尝试创建一个最小示例:
Tl;dr:没完全做到。或者至少问题不直接在于使用模板成员获取 class 的地址。以下代码有效。
#include <stdio.h>
#include <stdlib.h>
template <typename T>
class Member{
public:
Member(T variable):var(variable){};
T var;
};
class Owner{
public:
Owner(int m):member(m){};
Member<int> member;
};
class Referencer{
public:
Referencer(Owner *o){this->op = o;};
Owner *op;
};
int main(){
Owner o(1);
Referencer r(&o);
printf("%d\n", r.op->member); // Output is 1.
return 0;
}
由于上面的示例有效,我不确定它是否真的影响了拥有模板成员的情况。我真的迷失了这个。非常感谢任何帮助!
Camera cam();
这是一个简单的函数声明。您声明一个返回 Camera
并接受零参数的函数。你的 MSVC 编译器抱怨它!
Input::Input(Input &&): cannot convert argument 1 from 'Camera(__cdecl *)(void)' to 'Camera *'
只需使用:
Camera cam;
并调用默认构造函数。