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

标签 c++ visual-c++

这个问题相当理论化,尽管有趣的是是什么让 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/

相关文章:

c++ - 我们如何同时使用汉明距离和坐标之间的距离来匹配特征?

C++ 映射迭代器问题

c++ - 当文件路径名超过 255 个字符时,如何在 Windows 中使用 MFC 创建文件?

c++ - std::exception 使用来自本地对象的消息

c++ - 在 vector C++ 中打印对象内的对象

c++ - 如何使用WIN32内核和VC++将位图图像拉伸(stretch)到某些特定的坐标?

c++ - QT部署错误

c++ - 如何在 Microsoft Visual Studio 2017 中检查 C++ 版本

c# - 如何在 C# 或 C++ 中使用条件语句检查/比较四个变量是否相同或不同

c++ - 在C++中,为什么需要提及指针的类型?