我是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]
答案 0 :(得分:2)
您无法将void
功能传递给iostream
。
要么你的函数应该返回一个值,要么iostream
或display()
写一些东西(就像它似乎是)。您可以通过以下方式解决问题:
int main()
{
index1 i;
i++;
cout<<endl<<"i=";
i.display();
i++;
cout<<endl<<"i=";
i.display();
i--;
cout<<endl<<"i=";
i.display();
}
您的operator++
重载错误,应该是:
index operator ++(int) // Look at the return value
{
count++;
return *this; // return
}
operator--
也是如此。
只需查看this操作员重载即可。
答案 1 :(得分:0)
以note:
开头的g ++错误消息只是提供有关先前错误发生原因的更多信息。使用g ++ 4.8,我得到(以及其他错误):
main.cpp:40:21: error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘void’)
cout<<endl<<"i="<<i.display();
^
很好地解释了这个问题。 i.display()
的类型为void
,因此您无法将其传递给operator<<
。
答案 2 :(得分:0)
以下行意味着您向stdout追加void并且不支持。
cout<<endl<<"i="<<i.display();
所以编译器抱怨如下。
"cannot convert ‘i.index1::<anonymous>.index::display()’ (type ‘void’) to type ‘char’"
您可以使用以下内容执行相同操作,
cout<<endl<<"i=";
i.display();
答案 3 :(得分:0)
你应该把std :: ostream&amp;将参数转换为显示功能:
std::ostream& display(std::ostream& stream)
{
stream << endl << "count=" << count;
return stream;
}
然后您可以显示将对象写入标准输出或文件。