函数原型,无定义

时间:2019-11-05 19:43:49

标签: c++ prototype definition

我正在开发一个不能使用类的库。我有一个在获取KeyDown事件时调用的函数,我想调用一个我之前在库中设置原型的函数。 问题是,如果用户不想处理任何输入,我不想强​​制用户定义此功能。但是链接器不会让我定义没有定义的原型或设置默认的空定义。我能做什么? 我正在使用C ++ ...

这是原型/

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

1 个答案:

答案 0 :(得分:0)

在C ++中无法重新定义函数。阅读this中的“一个定义规则”。

  

在任何一个翻译单元中仅允许对任何变量,函数,类类型,枚举类型,概念(自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
}

看起来不一样,但实际上是一样的...