嗨。在提出问题之前,我曾以其他错误查看过其他线程,但对我没有任何帮助。
我的问题代码在in >> a.name >> a.extension;
上。在测试自己时,如果我将变量的类型从string
更改为char
,则可以使用,但不能使其与string
类型的值一起使用。
难道我做错了什么?
下面是关于编译的完整错误代码(Visual Studio 2015)
提前致谢。
#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;
}
最佳答案
此处的关键词是const
,这意味着该东西不能被修改。
您正在尝试修改const
。你不能这样做。
您的函数,像一般的operator>>
一样,应这样声明:
friend istream& operator>>(istream& in, Soft& a)
我所做的更改是删除了
const
。顺便说一句,我完全没有理由将您的成员变量
size
和dateTime
用作动态分配整数的指针。如果仅使它们成为普通整数,您的代码就会简单得多。关于c++ - 错误C++ 2679(二进制 '>>' : no operator found which takes a right-hand operand of type 'const std::string' (or there is no acceptable conversion)),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39807734/