ウィキブックス( http://en.wikibooks.org/wiki/C%2B%2B_Programming/Operators/Operator_Overloading )のサンプルコードを試していますが、VisualStudioでコンパイルされません。このコードは、アドレス、参照、およびポインター演算子(、、および)のオーバーロードに関するoperator&()
ものoperator*()
ですoperator->()
。
//file example.cpp
#include "stdafx.h"
#include <iostream>
class T {
public:
const void memberFunction() const {
std::cout << "Hello!\n";
}
};
// forward declaration
class DullSmartReference;
class DullSmartPointer {
private:
T *m_ptr;
public:
DullSmartPointer(T *rhs) : m_ptr(rhs) {};
DullSmartReference operator*() const {
return DullSmartReference(*m_ptr);
}
T *operator->() const {
return m_ptr;
}
};
class DullSmartReference {
private:
T *m_ptr;
public:
DullSmartReference (T &rhs) : m_ptr(&rhs) {}
DullSmartPointer operator&() const { // error C2027: use of undefined type 'DullSmartReference'
return DullSmartPointer(m_ptr);
}
// conversion operator
operator T() { return *m_ptr; }
};
int _tmain(int argc, _TCHAR* argv[])
{
DullSmartPointer dsp(new T);
dsp->memberFunction(); // calls T::memberFunction
T t;
DullSmartReference dsr(t);
dsp = &dsr;
t = dsr; // calls the conversion operator
std::cin.get();
return 0;
}
Visual Studioは、常にコンパイラエラーC2079を報告します。エラーメッセージは
1> e:\ projects \ bad \ example.cpp(20):エラーC2027:未定義のタイプ「DullSmartReference」の使用 1> e:\ projects \ bad \ example.cpp(13):「DullSmartReference」の宣言を参照 1> e:\ projects \ bad \ example.cpp(21):エラーC2440:'':「T」から「DullSmartReference」に変換できません 1>ソースまたはターゲットのタイプが不完全です
どうすればエラーを修正できますか?VS 2010を使用していますが、バージョンは重要ではないと思います。ありがとう!
更新: 1。コードを更新し、エラーメッセージを完了しました。