嗨。在提出问题之前,我曾以其他错误查看过其他线程,但对我没有任何帮助。
我的问题代码在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

顺便说一句,我完全没有理由将您的成员变量sizedateTime用作动态分配整数的指针。如果仅使它们成为普通整数,您的代码就会简单得多。

关于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/

10-16 04:41