注册 登录
编程论坛 C++教室

帮我看下为何这里运算符重载失败

lsrwan 发布于 2010-04-21 23:25, 699 次点击
#include "stdafx.h"
#include <vector>
#include <deque>
#include <algorithm>
#include <iostream>
#include <ostream>
using namespace std;

class sumsqplus1
{
public :
    sumsqplus1():value(0){};
    int operator {}()
    {
        ++value; return value*value + 1;
    }
private:
    int value;
};


int main( )

{
    vector<int> int_vector(4);
    generate(int_vector.begin(),int_vector.end(),sumsqplus1{});
    for each (int elme in int_vector)
    {
        cout << elme << " " << endl;
    }
    return 0;
}这段代码重载了{},不知道为什么总是失败,要换成()才可以成功,有那个高人知道为什么呢?
1>e:\soft\vc++\test\slt_generate\slt_generate\slt_generate.cpp(16) : error C2833: 'operator {' is not a recognized operator or type
1>e:\soft\vc++\test\slt_generate\slt_generate\slt_generate.cpp(16) : error C2059: syntax error : 'newline'
1>e:\soft\vc++\test\slt_generate\slt_generate\slt_generate.cpp(16) : error C2143: syntax error : missing ';' before '}'
1>e:\soft\vc++\test\slt_generate\slt_generate\slt_generate.cpp(16) : error C2238: unexpected token(s) preceding ';'
1>e:\soft\vc++\test\slt_generate\slt_generate\slt_generate.cpp(16) : fatal error C1903: unable to recover from previous error(s); stopping compilation

[ 本帖最后由 lsrwan 于 2010-4-21 23:29 编辑 ]
4 回复
#2
cnfarer2010-04-22 06:20
不是什么都可以重载的吧?
#3
mylzy1592010-04-22 08:15
'operator {' is not a recognized operator or type
  就这句..你明白就行了. 他不能识别.
#4
lsrwan2010-04-22 13:04
我看到一本书上说只有几个字符不可以重载,比如:: -> . 等几个没说{}不可以重载,上面的代码我用 = 也不能重载,好像只有 () 可以重载,不明白其中的原因.
#5
南国利剑2010-04-23 23:48
不能重载的运算符只有五个,他们是
.
.*
::
sizeof
?:
就这五个,其他的都可以重载。
1