2016-04-29 376 views
0

Ich arbeite gerade an einem Code, wo ich ein Array in meinem Haupt deklarieren muss und eine Funktion erstelle, die es mir ermöglicht Benutzereingaben zu machen Speichern Sie es in das Array. Ich habe begonnen, aber ich renne in den Fehler binary '>>': no operator found which takes a right-hand operand of type 'CDistance' Ich habe #include <string> in meinem Code enthalten. Der Fehler tritt unten in der Funktion void inputDist(CDistance distList[], int size) auf. Unten ist der vollständige Code. Alle und jedes Feedback wird geschätzt. Vielen Dank.C++ Kein Operator ">>" stimmt mit diesen Operanden überein (<string> in der Kopfzeile)

#include <iostream> 
#include <conio.h> 
#include <string> 

using namespace std; 

class CDistance 
{ 
private: 
    int feet; 
    int inches; 
    int feet2; 
    int inches2; 

public: 
    CDistance(); 
    CDistance(int, int, int, int); 
    ~CDistance(); 
    CDistance printAndAdd(const CDistance distList[], int size); 
    void setDistt(); 
    void printDistt() const; 
    void add(const CDistance&) const; 
    void subtract(const CDistance&) const; 
    void menu(const CDistance&) const; 
    void inputDist(CDistance distList[], int size); 
}; 

CDistance::CDistance() 
{ 
    feet; 
    inches; 
    feet2; 
    inches2; 
} 

CDistance::CDistance(int f, int i, int f2, int i2) 
{ 
    feet = f; 
    inches = i; 
    feet2 = f2; 
    inches2 = i2; 
} 

CDistance::~CDistance() 
{ 
} 

void CDistance::setDistt() 
{ 
    cout << "Enter the first set of feet: "; 
    cin >> feet; 
    cout << "\nEnter the second set of feet: "; 
    cin >> feet2; 
    cout << "\nEnter the first set of inches: "; 
    cin >> inches; 
    cout << "\nEnter the second set of inches: "; 
    cin >> inches2; 
} 

void CDistance::printDistt() const 
{ 
    cout << "Feet: " << feet << "," << feet2 << endl << "Inches: " << inches << "," << inches2 << endl; 
} 

void CDistance::add(const CDistance& total) const 
{ 
    int totFeet = feet + feet2; 
    int totInches = inches + inches2; 
    if (totInches >= 12) 
    { 
     totInches = totInches/12; 
     int newFeet = totInches; 
     totFeet = totFeet + newFeet; 
    } 
    cout << totFeet << " feet" << endl; 
    cout << totInches << " inches" << endl; 
} 

void CDistance::subtract(const CDistance& total) const 
{ 
    int totFeet = feet - feet2; 
    int totInches = inches - inches2; 
    if (totInches >= 12) 
    { 
     totInches = totInches/12; 
     int newFeet = totInches; 
     totFeet = totFeet - newFeet; 
    } 
    cout << totFeet << " feet" << endl; 
    cout << totInches << " inches" << endl; 
} 

void CDistance::menu(const CDistance& total) const 
{ 
    CDistance m(feet, inches, feet2, inches2); 
    int choice; 
    bool menuGo = true; 


    while (menuGo != false) 
    { 
     { 
      cout << 
       "\nWhat would you like to do?" 
       "\n1: Add " 
       "\n2: Subtract " 
       "\n3: Exit" << endl; 
      cin >> choice; 
     } 

     switch (choice) 
     { 
     case 1: 
      cout << "You chose to add" << endl; 
      m.add(total); 
      break; 
     case 2: 
      cout << "You chose to subtract" << endl; 
      m.subtract(total); 
      break; 
     case 3: 
      cout << "Please enter 5 digits to enter into the array: "; 
      m.inputDist; 
     case 4: 
      cout << "Goodbye" << endl; 
      menuGo = false; 
      break; 
     default: 
      cout << "Not a valid choice." << endl; 
      cout << "Choose again." << endl; 
      cin >> choice; 
      break; 
     } 
    } 
} 

void inputDist(CDistance distList[], int size) 
{ 
    int dist = 0; 
    for (int i = 0; i < 6; i++) 
    { 
     cin >> distList[i]; 
    } 
} 

//CDistance printAndAdd(const CDistance distList[], int size); 
int main() 
{ 
    CDistance d1, d2(0, 0, 0, 0); 

    CDistance distList[5]; 

    d1.setDistt(); 
    d1.printDistt(); 
    d1.menu(d2); 
    inputDist(distList, 0); 
    _getch(); 
    return 0; 
} 
+5

Es ist genau das, was es sagt ... es gibt keinen Operator, mit dem man eine 'CDistance' von' cin' lesen kann. – immibis

+1

Stoppen Sie mit ** conio.h **. Es ist nicht Teil der _C++ Standardbibliothek_. – Destructor

+0

Dies hat Kompilierungsfehler, andere als die, über die Sie überall auf dem Laufenden sind. Fix diese zuerst, und dann, wenn Sie noch Hilfe benötigen, können Sie erneut fragen. –

Antwort

0

CDistance ist eine eigene Art, und cin hat keine Schnittstelle ihre Werte zu setzen.

void inputDist(CDistance distList[], int size) 
{ 
    int dist = 0; 
    for (int i = 0; i < 6; i++) 
    { 
     cin >> distList[i]; //<- invalid 
    } 
} 

Versuchen Sie Folgendes statt:

void inputDist(CDistance distList[], int size) 
{ 
    int dist = 0; 
    for (int i = 0; i < 6; i++) 
    { 
     int feet; cin >> feet; 
     int inches; cin >> inches; 
     int feet2; cin >> feet2; 
     int inches2; cin >> inches2; 
     distList[i] = CDistance(feet,inches,feet2,inches2); 
    } 
} 
2

Wenn Sie Sie cin >> variable mit einem benutzerdefinierten Typ verwenden möchten, haben Ihre eigene operator>> sonst der Compiler kann nicht wissen, zu erklären, wie Sie das tatsächlich lesen wollen Werte. Ein möglicher Weg, es in diesem Fall zu tun wäre:

friend std::istream& operator>>(std::istream& is, CDistance& dist); 

es als Freund Funktion im Inneren des Körpers der Klasse erklärt, und es dann wie

std::istream& operator>>(std::istream& is, CDistance& dist) { 
    is >> dist.feet >> dist.inches >> 
      dist.feet2 >> dist.inches2; 
    return is; 
} 

Auch außerhalb der Definition auf eine Randnotiz, Ihr Standard-Konstruktor tut absolut nichts:

CDistance::CDistance() 
{ 
    feet;  // evaluate feet and discard it as you don't do anything with it. 
    inches;  // same 
    feet2;  // same 
    inches2; // same 
} 

Sie könnten sie festlegen möchten Werte inst auf Standard ead:

CDistance::CDistance() 
{ 
    feet = inches = feet2 = inches2 = 0; 
} 

würde sie alle 0 als Standard festgelegt.

+0

@RSahu danke für die heads-up, total vermisst diesen fehler ... –