0

編集*私はばかです...私を助けてくれてありがとう、この質問は解決されました。*私ののクラスでは、以下のコードは << 演算子でエラーを出し続けます

cout << "Driver: " << driver->print(); 
cout << "Owner: " << owner->print();

エラーには、「これらのオペランドに一致する演算子はありません」と表示されます。これは私の宿題なので、ドライバーから何らかの方法で印刷機能を呼び出す必要があります。メイン関数では、実際にはまだドライバーまたは所有者を設定していませんが、それは問題ではないと思います。前もって感謝します。

#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Person
{
public:
Person(string _name,int _age)
{
    _name = name;
    _age = age;
    cout << "Name: " << name << endl;
    cout << "Age: " << age << endl;
}
string getName()
{
    return name;
}
int getAge()
{
    return age;
}
int incrementAge()
{
    age +=1;
    return age;
}
void print()
{
    cout << "Name: " << name << endl;
    cout << "Age: " << age << endl;

}


private:
string name;
int age;

};

class Car
{
public:
Car (string m)
{
    model = m;
}
void setDriver(Person *d)
{
    *driver = *d;
}
void setOwner(Person *o)
{
    *owner = *o;
}
void print()
{
    cout << "Model: " << model << endl;
    cout << "Driver: " << driver->print();
    cout << "Owner: " << owner->print();
}




private:

string model;
Person *owner;
Person *driver;


};

int main()
{
vector<Person*>people;
vector<Car*>cars;
string name = "";
int age = 0;
string model = 0;
int sentValue = 0;
while (sentValue != -1)
{
    cout << "Enter name: ";
    cin >> name;
    cout << "Enter age: ";
    cin >> age;


    people.push_back(new Person(name, age));
    cout << "Enter car model: ";
    cin >> model;
            cars.push_back(new Car(model));
    cout << "Press -1 to stop, or 1 to enter info for others: ";
    cin >> sentValue;
}






//display car model, 
//owner’s name and age,
//and driver’s name and age.

system("pause");
return 0;
   }
4

5 に答える 5

2

これを行う C++ の方法は、 andstd::ostream&<<の演算子を実装することです。例えば、PersonCar

#include <iostream>

std::ostream& operator<<(std::ostream& o, const Person& p) {
  return o << "Name: " << p.getName() << " Age: " << p.getAge();
}

次に、次のように使用します。

Person p("Bob", 23);
std::cout << p << "\n";

余談ですが、コード内にこれらすべてのポインターが本当に必要だとは思いません。

于 2012-09-01T16:15:09.053 に答える
1

print() 関数は既に出力をcoutに送信しているため、そこに再度送信する必要はありません。それ以外の

cout << "Driver: " << driver->print(); 

あなたはおそらく欲しい

cout << "Driver:" << endl;
driver->print();
于 2012-09-01T16:08:14.940 に答える
1

メンバー関数は をprint返しvoidます。voidをストリームに挿入することはできません。印刷関数を変更してストリーム参照を取得し、印刷を呼び出すオーバーロードされた演算子を追加すると、オブジェクト自体をストリームに挿入するだけで済みます。それはより慣用的です。

template <class Elem, class Traits>
void Car::print(std::ostream<Elem, Traits>& out) {
    out << "Model: " << model << '\n';
    out << "Driver: " << *driver;
    out << "Owner: " << *owner;
}

template <class Elem, class Traits>
std::ostream<Elem, Traits>& out, const Car& car) {
    return out << car;
}
于 2012-09-01T16:25:16.300 に答える
0
const std::string& Person::print() const
{
    return "Name " + name + "\n" + "Age " + age + "\n";    
}
于 2012-09-01T16:55:20.853 に答える
0
cout << "Driver: " << driver->print(); 

<<適切なオブジェクトが処理されるのを待っています。それがあなたの問題です。を実装するのではなく、実装print()して演算子をオーバーロードoperator<<(std::ostream&, const Person&);し、残りは C++ に任せます。次に、次のように印刷できます。

 cout << "Driver: " << driver; 
于 2012-09-01T16:08:16.373 に答える