gpt4 book ai didi

c++ - 在 C++ : template argument deduction/substitution failed 中继承类时出错

转载 作者:行者123 更新时间:2023-11-30 04:15:12 24 4
gpt4 key购买 nike

我是 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

要么你的函数应该返回一个值,要么一个 iostreamdisplay() 给自己写一些东西(就像它看起来的那样)。您可以通过以下方式解决您的问题:

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用于运算符重载。

关于c++ - 在 C++ : template argument deduction/substitution failed 中继承类时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18462567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com