所以我有一个带有两个数字的间隔类,我想使用++前缀和后缀,但我得到错误:1 IntelliSense:表达式必须具有类类型
这是代码:
class intervallum
{
int a;
int b;
public:
intervallum();
intervallum(int x,int y);
intervallum operator++();
void operator++(int);
void kiir();
};
intervallum intervallum::operator++()
{
a -= 1;
b += 1;
return intervallum(a,b);
}
void intervallum::operator++(int)
{
operator++();
}
void intervallum::kiir()
{
cout << "[" << a << "," << b << "]" << endl;
}
void main()
{
intervallum i(2,4);
i.kiir();
(++i).kiir();
i.kiir();
(i++).kiir; // <- the error is with this
i.kiir();
}
答案 0 :(得分:0)
看一下表达式
(i++).kiir;
首先,它应该是(i++).kiir();
,对吗?即便如此,intervallum::operator++(int)
会返回void
,并且您尝试在kiir
对象上调用void
(如果存在此类事物)。不好。
有几点需要注意:
intervallum::operator++()
应该返回对正在采取行动的对象的引用,否则您将最终使用副本。main
返回int
,即使您没有。{/ li>
答案 1 :(得分:0)
你必须阅读编译器输出,而不是intellisense东西。编译器明确说明了一个问题:
main.cpp(38): error C2228: left of '.kiir' must have class/struct/union
type is 'void'
然后你去指示一行(在我的例子中为38),右键单击i++
,选择&#34;转到定义&#34;并看到您的方法确实返回void
。
您可能需要检查操作员签名列表以编写一个严格的: Operators in C and C++