IntelliSense:表达式必须具有类类型(前缀后缀错误)

时间:2014-04-10 17:41:17

标签: c++

所以我有一个带有两个数字的间隔类,我想使用++前缀和后缀,但我得到错误: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();
}

2 个答案:

答案 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++