1

質問はかなり理論的ですが、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));
4

1 に答える 1

6

なしで宣言して()ください:

maidsafe::dht::PrivateKeyPtr pk;

残念ながら、初期化されていない値を与えるプリミティブ型の場合、C ++ 11では、値を次のように初期化できます{}

maidsafe::dht::PrivateKeyPtr pk{};

関連する構文解析の問題については、C++の最も厄介な構文解析を参照してください。

于 2012-05-09T06:47:46.353 に答える