C++ 错误C++;2679(二进制';>;';:未找到接受';const std::string'类型的右操作数的运算符;(或没有可接受的转换))
你好。在我提问之前,我已经查看了其他有相同错误的线程,没有任何东西对我有效。 我的问题代码位于a.name>>a.extension中的C++ 错误C++;2679(二进制';>;';:未找到接受';const std::string'类型的右操作数的运算符;(或没有可接受的转换)),c++,visual-studio,compiler-errors,operator-overloading,C++,Visual Studio,Compiler Errors,Operator Overloading,你好。在我提问之前,我已经查看了其他有相同错误的线程,没有任何东西对我有效。 我的问题代码位于a.name>>a.extension中的。正如我自己测试的那样,如果我将变量的类型从string更改为char,它将起作用,但我无法使它与string类型的值一起工作 我做错什么了吗? 下面是编译的完整错误代码(Visual Studio 2015) 错误C2679二进制“>>”:找不到使用右手的运算符 “const std::string”类型的操作数(或没有可接受的 转换) 提前谢谢 #inclu
代码>。正如我自己测试的那样,如果我将变量的类型从string
更改为char
,它将起作用,但我无法使它与string
类型的值一起工作
我做错什么了吗?
下面是编译的完整错误代码(Visual Studio 2015)
错误C2679二进制“>>”:找不到使用右手的运算符
“const std::string”类型的操作数(或没有可接受的
转换)
提前谢谢
#include <iostream>
#include <ctime>
#include <string>
using namespace std;
class Soft {
private:
int *size;
time_t *dateTime;
public:
string name;
string extension;
Soft();
Soft(string, string);
Soft(const Soft&source);
~Soft();
friend istream& operator>> (istream& in, const Soft& a)
{
in >> a.name >> a.extension;
return in;
};
void changeName(string);
void changeExtension(string);
};
Soft::Soft() {
size = new int;
*size = 0;
name = string("");
extension = string("");
dateTime = new time_t;
*dateTime = time(nullptr);
}
Soft::Soft(const Soft&source) {
name = source.name;
extension = source.extension;
size = new int;
*size = *source.size;
dateTime = new time_t;
*dateTime = time(nullptr);
}
Soft::Soft(string a, string b) {
name = a;
extension = b;
dateTime = new time_t;
*dateTime = time(nullptr);
}
Soft::~Soft() {
delete[] size;
delete[] dateTime;
}
void Soft::changeExtension(string a) {
extension = a;
}
void Soft::changeName(string a) {
name = a;
}
int main() {
Soft a;
getchar();
getchar();
return 0;
}
#包括
#包括
#包括
使用名称空间std;
类软{
私人:
整数*大小;
时间*日期时间;
公众:
字符串名;
字符串扩展;
软();
软(弦,弦);
软件(const-Soft和source);
~Soft();
friend istream&operator>>(istream&in、const Soft&a)
{
在>>a.name>>a.extension中;
返回;
};
void changeName(字符串);
无效更改扩展名(字符串);
};
Soft::Soft(){
大小=新整数;
*尺寸=0;
名称=字符串(“”);
扩展名=字符串(“”);
dateTime=新时间\u t;
*dateTime=时间(nullptr);
}
Soft::Soft(const-Soft和source){
name=source.name;
extension=source.extension;
大小=新整数;
*size=*source.size;
dateTime=新时间\u t;
*dateTime=时间(nullptr);
}
Soft::Soft(字符串a、字符串b){
名称=a;
扩展=b;
dateTime=新时间\u t;
*dateTime=时间(nullptr);
}
Soft::~Soft(){
删除[]大小;
删除[]日期时间;
}
void Soft::changeExtension(字符串a){
扩展=a;
}
void Soft::changeName(字符串a){
名称=a;
}
int main(){
软a;
getchar();
getchar();
返回0;
}
这里的关键词是const
,这意味着该内容无法修改
您正试图修改一个const
对象。你不能那样做。
通常,您的函数与任何运算符>>
一样,应该这样声明:
friend istream& operator>>(istream& in, Soft& a)
我所做的更改是删除常量
顺便说一下,我认为没有任何理由让您的成员变量size
和dateTime
成为指向动态分配整数的指针。如果你只把它们变成普通整数,你的代码会简单得多。这里的关键词是const
,这意味着这个东西不能修改
您正试图修改一个const
对象。你不能那样做。
通常,您的函数与任何运算符>>
一样,应该这样声明:
friend istream& operator>>(istream& in, Soft& a)
我所做的更改是删除常量
顺便说一下,我认为没有任何理由让您的成员变量size
和dateTime
成为指向动态分配整数的指针。如果只将它们设为普通整数,代码将简单得多。赋值运算符的l值不能是常量,因为该运算符会更改值,因此尝试更改常量值就是试图打破规则
请看插入运算符:
ostream& operator <<(ostream&, const myCalss&); // here const is ok
但在您的示例中,您不需要这样做,我只是解释您可以更改cont变量。赋值运算符的l值不能是常量,因为该运算符更改值,因此尝试更改常量值是试图打破规则
请看插入运算符:
ostream& operator <<(ostream&, const myCalss&); // here const is ok
但在您的示例中,您不需要这样做,我只是解释您可以更改cont变量。我也不明白,但我的学校老师希望所有内容都带有指针。。。它是显式编写的,用于对所有对象使用指针variables@M.Eugen:那太可笑了。有人教你如何做错事(@LightnessRacesinOrbit:你没被教过‘mutable’关键字的作用吗?他可以将他的成员数据声明为mutable,然后他的例子就可以了fine@Raindrop7:他为什么要这样做?只需正确声明运算符…将对象的常量引用带入一个函数是没有意义的,该函数的唯一目的是使答案就在下面,我说你甚至可以做傻事。但是我没有建议他去做,所以我也看不见,但是我的学校老师想要所有的东西都有指针……这是明确写的,所有的东西都使用指针variables@M.Eugen:那太可笑了。有人教你怎么做错事(@LightnessRacesinOrbit:你没被教过‘mutable’关键字的作用吗?他可以将他的成员数据声明为mutable,然后他的例子就可以了fine@Raindrop7:为什么要这样做?只需正确声明运算符……将对对象的引用转换为唯一目的是改变答案就在下面,我说你甚至可以做傻事,但我没有建议他这么做