我是C++的新手。在C++中繼承類時出錯:模板參數推導/替換失敗
我寫了一個非常簡單的程序,該程序如下
#include<iostream>
using namespace std;
class index
{
protected:
int count;
public:
index()
{
count=0;
}
index(int c)
{
count=c;
}
void display()
{
cout<<endl<<"count="<<count;
}
void operator ++()
{
count++;
}
};
class index1:public index{
public:
void operator --()
{
count--;
}
};
int main()
{
index1 i;
i++;
cout<<endl<<"i="<<i.display();
i++;
cout<<endl<<"i="<<i.display();
i--;
cout<<endl<<"i="<<i.display();
}
但是,當我編譯G ++這段代碼中,我得到這個:
In file included from /usr/include/c++/4.7/iostream:40:0,
from inheritance.cpp:1:
/usr/include/c++/4.7/ostream:480:5: note: template<class _Traits> std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, char)
/usr/include/c++/4.7/ostream:480:5: note: template argument deduction/substitution failed:
inheritance.cpp:40:30: note: cannot convert ‘i.index1::<anonymous>.index::display()’ (type ‘void’) to type ‘char’
編輯 我改變cout<<endl<<"i="<<i.display();
到cout<<endl<<"i="; i.display();
它解決了這個問題。
但現在我越來越
inheritance.cpp:39:3: error: no ‘operator++(int)’ declared for postfix ‘++’ [-fpermissive]
您試圖將* void *函數的返回值傳遞給iostream ...您可能意思是'cout << endl <<「i =」; i.display();' – Borgleader
@Borgleader:謝謝,它解決了這個問題。但它找不到我的重載操作符.''繼承。cpp:42:3:錯誤:沒有爲後綴'++'聲明'operator ++(int)'[-fpermissive] ' –
修復後操作符可以通過運算符++(int)語法重載。 – Kunal