">>没有找到接受'std::ifstream'类型的左手操作符的操作符(或者没有可接受的转换)" [关闭]

问题描述 投票:0回答:1

我试图创建一个动态数组,然后使用输入文件中的文本填充该数组,但我一直得到这个错误。我找了好几个小时的答案,但他们似乎都进入了向量。我也不认为我缺少任何库。

int main()
{
    // Parameter - Instance 1
    Grocery g1("NA", 0, "NA");
    g1.setName("Milk");
    g1.setQuant("1");
    g1.setUnit("Bottle");

    Grocery g2(g1); // Calls copy constructor

    // Default constructor - Instance 3
    //Grocery g3(); 

    // Operator =
    Grocery g4;
    cout << "Operator = Running" << endl;
    g4 = g2;
    cout << g4.getName() << endl;
    cout << g4.getQuant() << endl;
    cout << g4.getUnit() << endl << endl;


    // Operator <<
    cout << "Operator<< Running" << endl;
    Grocery g5("Salt", "1", "Teaspoon");
    cout << g5 << endl;
    //cout << g5.getName();
    //cout << g5.getQuant();
    //cout << g5.getUnit();


    // Dynamic Array of Grocery
    Grocery* groceryArray;
    groceryArray = new Grocery[3];
    ifstream inputFile;
    inputFile.open("fileName.txt");


for (int i = 0; i < 3; i++)
    {
        inputFile >> groceryArray[i].setName;
        cout >> groceryArray[i].setName;
    }

    inputFile.close();
    delete[]groceryArray;
    return 0;
}

//Grocery.h
#pragma once
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

class Grocery
{
private:
    string* m_name;
    string* m_quant;
    string* m_unit;

public:
    Grocery(); // Default constructor
    Grocery(string n, string q, string u); // Parametered constructor
    ~Grocery(); // Destructor
    Grocery(const Grocery& rhs); // Copy constructor
    Grocery& operator=(const Grocery& rhs); // Operator=
    friend ostream& operator<<(ostream& out, const Grocery& rhs); //Operator>>
    string getName();
    void setName(string n);

    string getQuant();
    void setQuant(string q);

    string getUnit();
    void setUnit(string u);

};

当运行它时,我得到了两个错误:错误C2676二进制'>>': 'std::ostream'没有定义这个操作符或转换为预定义操作符可接受的类型 错误C2679二进制'>>': 没有找到可以接受'overloaded-function'类型的右手操作数的操作符(或没有可接受的转换)。

c++
1个回答
1
投票

在C++中,为了直接从用户那里获得输入,你必须应用>>运算符,请看下面的例子 运算符>>从字符串中获得单项式。

istream& operator>>(istream& input, Monomial& mon){
    char str[SIZE];
    cin.getline(str, SIZE);
    mon.updateMonomialString(str, mon.coefficientNum, mon.degreeNum);

    return input;
}

阅读更多关于运营商>>实施的内容。

另一件事 getters 应该返回stringsinfo等。而 setters 应设置值对象等。

© www.soinside.com 2019 - 2024. All rights reserved.