所以我有一个包含两个数字的区间类,我想使用++ 前缀和后缀,但我收到错误: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();
}
最佳答案
看一下表达式
(i++).kiir;
首先应该是(i++).kiir();
, 正确的?即便如此,intervallum::operator++(int)
返回 void
,而您正在尝试调用 kiir
在 void
对象(如果存在这样的东西)。不好。
有几点需要注意:
- 如评论中所建议,
intervallum::operator++()
应该返回对正在操作的对象的引用,否则你最终会使用一个拷贝。 - 你应该真的告诉编译器
main
返回int
,即使你没有。
关于c++ - 智能感知 : expression must have class type (prefix postfix error),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22995224/