gpt4 book ai didi

c++ - 具有模板化成员的类的地址出现奇怪的错误

转载 作者:行者123 更新时间:2023-11-28 04:48:59 25 4
gpt4 key购买 nike

我在修改我的类结构时遇到了一个奇怪的错误,我无法用更简单的类重现该错误。

情况:

我决定上课Input有一个对象的引用(一个普通的旧指针),该对象将被用户的键输入操作,Camera .以前我通过 Input 链接它们的构造函数:Input in(&cam);但在相机中包含一个模板化成员之后:Buffer<Layout> buffer我的整个主要功能都崩溃了。

以前这没问题:

Camera cam();
Input in(&cam);
cam.setProj(glm::mat4(1.0f)); // Example of function call

头文件当然在单独的文件中,而实现在 .cpp 文件中。

Input有成员(member)Camera *camInput 的构造函数是:

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 typeleft of '.func' must have class/struct/union .

尝试创建一个最小示例:

Tl;dr:没有完全到达那里。或者至少问题不直接在于使用模板成员获取类的地址。以下代码有效。

#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;

并让默认构造函数被调用。

关于c++ - 具有模板化成员的类的地址出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48601892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com