對不起,如果它是一個非常基本的問題,我試圖運行下面的程序,並且我正在分段錯誤。將智能指針的明晰度轉化爲指向者類型的原始指針。
我的理解是什麼?
有一個函數proc(t),其中t通過運算符T 與T *相交。因此,在執行proc(t)函數時,我們將有一個指向T的指針類型,並且它對調用display()函數是合法的。
我想要什麼?
1)我在哪裏犯這個錯誤?
2)我的理解是否正確?
#include <iostream>
using namespace std;
template <typename T>
class sPtr
{
private:
T * __pointee;
public:
operator T *() {
cout <<"Inside T*() "<<endl;
};
explicit sPtr (T * t)
{
__pointee = t;
};
T * operator->() {
return __pointee;
}
};
class JTest
{
private:
int x;
public:
JTest (int l=100) { x=l; };
void display();
};
void JTest::display()
{
cout <<"Display API x is "<<x<<endl;
}
void proc (JTest * tmp)
{
cout <<" proc"<<endl;
tmp->display();
cout <<"Invoking JTest -> display "<<endl;
}
int main (int argc, char ** argv)
{
sPtr <JTest> t(new JTest);
t->display();
proc(t); // Invokes operator T*().
}
不要使用帶有兩個連續下劃線的標識符,它們是爲編譯器和標準庫保留的。 – Angew 2013-02-21 09:53:20
你的'operator T *'不會返回任何東西。代碼甚至不應該編譯。 – Angew 2013-02-21 09:54:29
這是(可能)警告,而不是錯誤 – 2013-02-21 10:02:24