可能重複:
C++ method only visible when object cast to base class?!C++模板:爲什麼不能正常工作?
我有後續代碼:
class String {
char* _Text;
public:
String(const char* s) {
int iLen = strlen(s);
_Text = new char [iLen+1];
strcpy(_Text, s);
}
};
template<typename T>
class Vector {
public:
int Add(T* pItem) { return 0; }
int Add(const T* pItem) { return 0; }
int Add(T& pItem) { return 0; }
};
class StrVector : public Vector<String> {
public:
int Add(char* pItem) { return 0; }
int Add(const char* pItem) { return 0; }
};
void main()
{
String s;
StrVector v;
v.Add(s); <-------------
}
線v.Add(s);
應該叫Vector::Add(T& pItem)
,對不對?
重複:http://stackoverflow.com/questions/2068088/c-method -only-visible-when-object-cast-to-base-class – GManNickG 2010-11-09 19:59:23
(1)'StrVector :: Add' * shadow *'Vector :: Add';查找「StrVector :: Add」不會在基類中查找,因爲它在派生類中找到了函數。你可以在定義中使用'使用Vector :: Add;'來找到它們。 (2)'String'需要實現一個析構函數,然後需要[The Big Three](http://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29)。 (3)'Vector'需要一個虛擬析構函數或受保護的析構函數;當它沒有虛擬析構函數時,通過基類指針刪除會導致UB。 (4)'main'返回'int'! – GManNickG 2010-11-09 20:03:10
(5)你應該只使用'std :: string'和'std :: vector'。 (6)當你提出問題時,你需要定義「不工作」:不編譯,不符合你期望的(以及你期望的)等等?或者我可以選擇我的任何一點作爲 「有什麼問題」的答案。 – GManNickG 2010-11-09 20:03:52