C++ 错误C2593:&x27;运算符=';模糊性;在VS6上编译得很好,但在VS10上我得到了这个错误

C++ 错误C2593:&x27;运算符=';模糊性;在VS6上编译得很好,但在VS10上我得到了这个错误,c++,C++,我得到以下错误: 1>c:\documents and settings\krzys\desktop\desktop icons\ollydbg\plugins\odbgscript\OllyLangCommands.cpp(3602): error C2593: 'operator =' is ambiguous 1> c:\documents and settings\krzys\desktop\desktop icons\ollydbg\plugins\odb

我得到以下错误:

1>c:\documents and settings\krzys\desktop\desktop icons\ollydbg\plugins\odbgscript\OllyLangCommands.cpp(3602): error C2593: 'operator =' is ambiguous
1>          c:\documents and settings\krzys\desktop\desktop icons\ollydbg\plugins\odbgscript\var.h(45): could be 'var &var::operator =(const long double &)'
1>          c:\documents and settings\krzys\desktop\desktop icons\ollydbg\plugins\odbgscript\var.h(42): or       'var &var::operator =(const int &)'
1>          c:\documents and settings\krzys\desktop\desktop icons\ollydbg\plugins\odbgscript\var.h(41): or       'var &var::operator =(const ulong &)'
1>          while trying to match the argument list '(var, std::streamsize)'
在此代码处:

map<string, var> variables;
streamsize sum = 0;

if (sum) {
    variables["$RESULT"] = sum;  // Error 1
    return true;
}
map变量;
流大小总和=0;
若有(总和){
变量[“$RESULT”]=sum;//错误1
返回true;
}

类变量
{
公众:
乌龙湾;
字符串str;
长双flt;
vt型;
布尔伊斯布夫;
整数大小;
var();
var(常数var和rhs);
var(字符串和rhs);
var(乌龙rhs);
var(int-rhs);
var(长双rhs);
//小于零此rhs
int比较(const var和rhs)const;
int比较(常量字符串和rhs)常量;
整数比较(const ulong和rhs)const;
整数比较(常数整数和rhs)常数;
整数比较(常数长双精度和rhs)常数;
字符串strclean(void);
字符串strbuffhex(无效);
字符串strbuff(无效);
变量和运算符=(常量变量和rhs);
变量和运算符=(常量字符串和rhs);
var&operator=(const-ulong&rhs);//错误4
var&operator=(const int&rhs);//错误3
变量和运算符=(无符号短和rhs);
变量和运算符=(无符号字符和rhs);
var&operator=(const long double&rhs);//错误2
变量和运算符+=(常量变量和rhs);
变量和运算符+=(常量字符串和rhs);
变量和运算符+=(常数和rhs);
变量和运算符+=(常量int和rhs);
变量和运算符+=(常数长双精度和rhs);
无效调整大小(ulong newsize);
};

用VS6编译得非常完美,但现在我用VS10得到了这个错误。

检查和的类型和变量的方法。他们有可能在从VS6到VS2010的切换中添加了新的运算符=重载。

您的
变量
映射包含
var
类型的值
sum
不是
var
,因此需要进行转换

VC6中的
streamsize
类型是一个简单的
int
,而
var
类将隐式地将其转换为
var
类型


在VS10中,
streamsize
是一个
\uuuu int64
,对于它,没有隐式转换为
var

那么,那些
操作符=
定义如何?什么是总和?什么是变量?我们如何在没有代码的情况下修复代码?多点代码可能会更好-至少是
sum
变量的类型/声明。哇,对不起。不管怎样,我还是把一切都给你吧。第3602行:给我们一切是解决问题的糟糕方法。这是大量的代码(顺便说一句,代码气味),尽管我没有阅读全部内容,但我认为您甚至没有给我们提供类的定义,因此
变量
。把问题削减到可管理的程度;你可能会用这种方法自己解决。否则,我重申我上面所说的。我的错,我以为一切都会发生。无论如何,映射变量;和streamsize总和=0;不过我还是不知道怎么了。
class var
{
public:
 ulong dw;
 string str;
 long double flt;
 vtype vt;
 bool isbuf;
 int size;

 var();
 var(const var& rhs); 
 var(string& rhs); 
 var(ulong rhs); 
 var(int rhs); 
 var(long double rhs); 

 // less than zero this < rhs
 // zero this == rhs 
 // greater than zero this > rhs 
 int compare(const var& rhs) const; 
 int compare(const string& rhs) const; 
 int compare(const ulong& rhs) const; 
 int compare(const int& rhs) const; 
 int compare(const long double& rhs) const; 

 string strclean(void);
 string strbuffhex(void);
 string strbuff(void);

 var& operator=(const var& rhs);
 var& operator=(const string& rhs);
 var& operator=(const ulong& rhs); // Error 4
 var& operator=(const int& rhs); // Error 3
 var& operator=(unsigned short& rhs);
 var& operator=(unsigned char& rhs);
 var& operator=(const long double& rhs); // Error 2

 var& operator+=(const var& rhs);
 var& operator+=(const string& rhs);
 var& operator+=(const ulong& rhs);
 var& operator+=(const int& rhs);
 var& operator+=(const long double& rhs);

 void resize(ulong newsize);

};