【发布时间】:2014-03-12 11:16:44
【问题描述】:
#include <vector>
typedef void (* const MyType)(void *, void *);
static void exampleFunction(void *param1, void *param2)
{
// ...
}
int main(int argc, char* argv[])
{
std::vector<MyType> myVector;
myVector.push_back(exampleFunction); // fails.
}
这是代码,//fails 的行似乎不可编译。
我把它注释掉,没有问题。但如果它打开,这就是我在 XCode 中遇到的错误:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1/memory:1593:27: Cannot initialize a parameter of type 'void *' with an lvalue of type 'void (*const *)(void *, void *)'
有人知道为什么会这样吗?
提前致谢。
【问题讨论】:
-
因为它是
const。毕竟 STL 对元素有一些要求。 -
std::vector和const通常不能一起玩。 -
一个离题建议:尽量避免
void*。改用模板。
标签: c++ vector stl constants std