HI。在我的问题之前,我已经查看了其他线程中的相同错误,没有任何对我有用。
我的问题代码位于in >> a.name >> a.extension;
。当我自己测试时,如果我将类型从string
更改为char
我的变量,它会起作用,但我无法使用string
类型的值。
我做错了吗? 低于compillation的完整错误代码(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;
}
答案 0 :(得分:3)
这里的关键词是const
,这意味着该事物无法修改。
您正在尝试修改const
内容。你做不到。
您的功能与任何operator>>
一般都应该声明如下:
friend istream& operator>>(istream& in, Soft& a)
我所做的更改是删除const
。
顺便说一句,我认为你的成员变量size
和dateTime
没有任何理由成为动态分配整数的指针。如果您只是将它们设为正常整数,那么您的代码将更简单。
答案 1 :(得分:0)
赋值运算符的l值不能保持不变,因为此运算符会更改值,因此尝试更改常量值是试图破坏规则。
查看插入操作符:
ostream& operator <<(ostream&, const myCalss&); // here const is ok
这里没关系,因为插入操作符只是用来打印值(const和非const)而不改变它们。
***如果您真的需要打破常量规则,请将您的成员数据声明为可变:
mutable int *size;
mutable time_t *dateTime;
但是在你的例子中你不需要这样做,我只是解释你可以改变cont变量。