可视C++变量声明被视为函数声明

visual C++ variable declaration is treated like a function declaration

本文关键字:声明 函数 变量 可视 C++      更新时间:2023-10-16

这个问题相当理论化,尽管有趣的是,是什么让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:ProjectsMaidSafe-DHTsrcmaidsafedhtdemodemo_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++ 最烦人的解析。