1
#include <iostream>
#include <string>

using namespace std;

class Person{
    public:
        Person(string n, int a, string g) {
            setName(n);
            setAge(a);
            setGender(g);
        }
        void setName(string x) {
            name = x;
        }
        void setAge(int x) {
            age = x;
        }
        void setGender(string x) {
            gender = x;
        }
        get() {
            return "\nName: " + name + "\nAge: " + age + "\nGender: " + gender + "\n";
        }
    private:
        string name;
        int age;
        string gender;
};


int main() {

    return 0;
}

それが私のコードです。私がやりたかったのは、名前、年齢、性別を定義する 3 つのパラメーターを持つコンストラクターを使用して基本的なクラスを作成することだけでした。何らかの理由で、これを実行してすべてが正常に機能していることを確認すると、次のエラーが表示されます (23 行目) : 型が一致しません 'const __gnu_cxx::__normal_iterator.

誰かが私のコードを修正して助けてくれますか? 私が間違ったことを本当に理解していません。事前に感謝します!

4

5 に答える 5

4

問題はここにあります:

public:
    ...
    get() {
        return "\nName: " + name + "\nAge: " + ... + gender + "\n";
    }

このメソッドの戻り値が定義されておらず、 to の値intstd::stringwithに追加しようとしているため+、これは不可能です。文字列を追加するだけでなく、より複雑な出力フォーマットが必要なため、次を使用できますstd::ostringstream

public:
    ...
    std::string get() {
        std::ostringstream os;
        os << "\nName: " << name << "\nAge: " << ... << gender << std::endl;
        return os.str();
    }

忘れないで#include <sstream>


サイドノート:

Person(string n, int a, string g) {
    setName(n);
    setAge(a);
    setGender(g);
}

Personクラス内にある場合、privateメンバーに直接アクセスできます。

Person(string n, int a, string g) : name(n), age(a), gender(g) { }
于 2013-09-25T06:22:51.247 に答える
2

関数getには戻り値の型が必要です。+さらに、C++ では、文字列と他のオブジェクトを自由に組み合わせることができません。代わりにa を使用してみてくださいstd::stringstream。これにより、文字列、数値などを入力できます。

string get() {
    basic_stringstream ss;
    ss << endl
       << "Name: " << name << endl
       << "Age: " << age << endl
       << "Gender: " << gender << endl;
    return ss.str();
}

先頭に a を追加する必要があります#include <sstream>

于 2013-09-25T06:23:44.093 に答える
2

文字列型(名前、性別)にint型(年齢)を追加することはできません。最初に年齢を文字列に変換します。

C++ 連結文字列と int を確認してください

于 2013-09-25T06:24:28.697 に答える
2

あなたのコードに2つの間違いがあります。

1. get メソッドで戻り値を文字列として使用していません。2. string と int を直接追加することはできません。

ここで文字列と整数を追加する方法を確認してください

于 2013-09-25T06:27:50.507 に答える
1

get()よくわかりませんが、関数が戻り値の型を宣言していないためだと思います。である必要がありますstring get()。そうは言っても、そのようなエラーの奇妙なエラーメッセージです。

于 2013-09-25T06:22:47.337 に答える