これが私のコード設定の方法です:
class SomeClass
{
public:
std::function<void()> someFunction;
}
AnotherClass.h
class AnotherClass
{
public:
void anotherFunction();
void yetAnotherFunction();
SomeClass someClass;
}
別のクラス.cpp
void AnotherClass::anotherFunction()
{
std::cout << "triggerd" << std::endl;
}
void AnotherClass::yetAnotherFunction()
{
someClass.someFunction = &AnotherClass::anotherFunction; //here
}
これにより、コンパイル時エラーが発生しました。error C2664: 'std::_Func_class<_Ret>::_Set' : cannot convert parameter 1 from '_Myimpl *' to 'std::_Func_base<_Rx> *'
調査の結果、これは VS2012 のバグであることがわかりました ( source )。そのため、「ここ」というラベルの付いた行someClass.someFunction = std::mem_fn(&AnotherClass::anotherFunction);
を、リンクに記載されているソリューションと同じように変更しました。ただし、これにより別のコンパイル時エラーが発生します: error C2562: 'std::_Callable_obj<_Ty>::_ApplyX' : 'void' function returning a value
. したがって、そのエラーで見つけた調査から、値を返す void として宣言された関数があることを意味します。これは、私が立ち往生している場所です。なぜなら、あるべきではない値を返す関数がないことを 100% 確信しているためです。これがVS2012の別のバグであるかどうかはわかりませんが、エラーには次のように書かれています:std::_Callable_obj<_Ty>::_ApplyX
これは明らかに私の機能ではありません。
なぜこれが起こっているのか、どうすれば解決できるのかについて誰かが情報を持っていますか?
ありがとう。