这个问题相当理论化,尽管有趣的是是什么让 MS VS2010 将以下变量声明(在 main
内)视为函数声明:
typedef std::shared_ptr<asymm::PrivateKey> PrivateKeyPtr;
...
void main()
{
...
maidsafe::dht::PrivateKeyPtr pk(); // I'm trying to init variable here, though it thinks it's function declaration
kNode->node()->Store(key, value, "", ttl, pk, std::bind(&StoreCallback, args::_1, key, ttl));
}
它抛出以下异常:
Error 5 error C2664: 'maidsafe::dht::Node::Store' : cannot convert parameter 5 from 'maidsafe::dht::PrivateKeyPtr (__cdecl *)(void)' to 'maidsafe::dht::PrivateKeyPtr' C:\Projects\MaidSafe-DHT\src\maidsafe\dht\demo\demo_main.cc 286 1 KademliaDemo
虽然以下几行很有魅力:
maidsafe::dht::PrivateKeyPtr pk = maidsafe::dht::PrivateKeyPtr();
kNode->node()->Store(key, value, "", ttl, pk, std::bind(&StoreCallback, args::_1, key, ttl));
最佳答案
在没有 ()
的情况下声明它:
maidsafe::dht::PrivateKeyPtr pk;
不幸的是,对于为您提供未初始化值的基本类型,但在 C++11 中您可以使用 {}
进行值初始化:
maidsafe::dht::PrivateKeyPtr pk{};
有关相关的解析问题,请参阅 c++ most vexing parse .
关于C++ 变量声明被视为函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10511003/