8

誰かが私が得ている理由を説明できますか?

エラーC2064:項は1つの引数を取る関数に評価されません

行の場合:

DoSomething->*pt2Func("test");

このクラスで

#ifndef DoSomething_H
#define DoSomething_H

#include <string>

class DoSomething
{
public:
    DoSomething(const std::string &path);
    virtual ~DoSomething();

    void DoSomething::bar(const std::string &bar) { bar_ = bar; }

private:
    std::string bar_;
};

#endif DoSomething_H

#include "DoSomething.hpp"

namespace
{

void foo(void (DoSomething::*pt2Func)(const std::string&), doSomething *DoSomething)
{
    doSomething->*pt2Func("test");
}

}

DoSomething::DoSomething(const std::string &path)
{
    foo(&DoSomething::bar, this);

}
4

1 に答える 1

17

問題#1: 2番目の引数の名前と2番目の引数の型が何らかの形で入れ替わっています。そのはず:

      DoSomething* doSomething
//    ^^^^^^^^^^^  ^^^^^^^^^^^
//    Type name    Argument name

それ以外の:

    doSomething* DoSomething

それはあなたが持っているものです。

問題#2:関数を正しく逆参照するには、いくつかの括弧を追加する必要があります。

    (doSomething->*pt2Func)("test");
//  ^^^^^^^^^^^^^^^^^^^^^^^

最終的に、これはあなたが得るものです:

void foo(
    void (DoSomething::*pt2Func)(const std::string&), 
    DoSomething* doSomething
    )
{
    (doSomething->*pt2Func)("test");
}

そして、これがあなたのプログラムのコンパイルの実例です。

于 2013-03-10T11:19:02.667 に答える