C++ 函数原型,无定义

C++ 函数原型,无定义,c++,prototype,definition,C++,Prototype,Definition,我正在开发一个不能使用类的库。我有一个函数,我在获取KeyDown事件时调用它,我想调用一个函数,我以前在库中为它设置了原型。 问题是,如果用户不想处理任何输入,我不想强制用户定义这个函数。但是链接器不允许我定义没有定义的原型,也不允许我设置默认的空定义。我能做什么? 我用C++的方式……/P> 这是原型/ void keyDown(int virtual_keyCode); void keyUp(int virtual_keyCode); 在C++中重新定义函数是不可能的。阅读有关“一个定义

我正在开发一个不能使用类的库。我有一个函数,我在获取KeyDown事件时调用它,我想调用一个函数,我以前在库中为它设置了原型。 问题是,如果用户不想处理任何输入,我不想强制用户定义这个函数。但是链接器不允许我定义没有定义的原型,也不允许我设置默认的空定义。我能做什么? 我用C++的方式……/P> 这是原型/

void keyDown(int virtual_keyCode);
void keyUp(int virtual_keyCode);

在C++中重新定义函数是不可能的。阅读有关“一个定义”规则的信息

在任何一个翻译单元中,只允许对任何变量、函数、类类型、枚举类型、概念(因为C++20)或模板进行一个定义(其中一些可能有多个声明,但只允许一个定义)

通过继承可以重载类函数。重载与重新定义不同

你可以使用函数指针,你可以重新分配,例如

#include<functional>
#include<iostream>

std::function<void(int)> keyUp = [](int) {};

void unused() {
    keyUp(2);
}

void KeyUp(int i) {
    std::cout << i << i << '\n';
}

int main() {
    unused(); // no print
    keyUp = [](int i) { std::cout << i << '\n'; };
    unused(); // prints 2
    keyUp = KeyUp;
    unused(); // prints 22
}
#包括
#包括
函数keyUp=[](int){};
作废未使用的(){
keyUp(2);
}
无效键控(int i){

std::不能使用函数指针。或者弱函数。为什么不能使用类?这是一个…奇怪的…要求。fwiw,问题不是没有定义的声明,而是在代码中的某个地方调用函数而没有为它提供定义。对弱函数感到好奇并发现,这似乎是一个可能的问题你问题的解决方法我用了一个弱引用,但当我重新定义它时,它仍然给我一个错误。