提问人:SillyGoose 提问时间:7/1/2022 最后编辑:SillyGoose 更新时间:7/1/2022 访问量:94
g++ 链接器在使用 auto 数据类型时失败
g++ Linker fails when using auto datatype
问:
我最近创建了一个项目,它有一个服务可以通过类订阅。你传递一个无符号的长整型、一个函数指针和你的参数。参数应该能够变化,所以我通过 auto 数据类型实现了它。
class TimerService {
public:
TimerService();
~TimerService();
void handler();
void subscribe(uint32_t cycTm, void (*cbFunc) ());
void subscribe(uint32_t cycTm, void (*cbFnc) (auto*), auto* arg1);
void subscribe(uint32_t cycTm, void (*cbFnc) (auto*, auto*), auto* arg1, auto* arg2);
private:
std::vector<TimerSubscriber*> subscribers;
};
然后,在代码中的其他位置,我使用此类。
void Test(int* i, int* j) {
cout << *i " " << *j << endl;
}
timerService = new TimerService();
int var1 = 1;
int var2 = 2;
timerService->subscribe(5000, Test, &var1, &var2);
对象的编译没有任何问题,但是在链接对象时,链接器失败,并显示“undefined reference to void TimerService::subscribe<int, int, int, int>(unsigned long, void ()(int, int*), int*, int*)”。 然后我所做的是更改我的“订阅”函数,使其采用 int 而不是 auto。更改后,它链接没有问题。链接器怎么可能不能与 auto 数据类型相处?此外,不带任何参数的“订阅”函数可以正常工作。
我正在使用 g++14 使用“-fconcepts-ts”标志进行编译,以启用“auto”数据类型。
答: 暂无答案
评论
auto