1

したがって、デフォルトのコンストラクターを使用して個々のエントリをメモリに挿入し、メソッドを呼び出してそれらを読み取りますgetBookInfo()。変数を 1 つだけ使用してテストを実行しようとするとgetBookInfo()、データを挿入した後に呼び出しても何も得られません。

何故ですか?

メイン.cpp

#include <iostream>
using namespace std;

#include "Book.h"

void main()
{
    Book book;

    book.setTitle("Advanced C++ Programming");
    book.setAuthorName("Linda", "Smith");
    book.setPublisher("Microsoft Press", "One Microsoft Way", "Redmond");
    book.setPrice(49.99);
    book.getBookInfo(); // <-= this should be output

    int i;
    cin >> i;
};

Book.cpp

#include <iostream>
#include <sstream>
using namespace std;

#include "Book.h"

Book::Book()
{
}

void Book::setTitle(string  title)
{
    title = title;
}


void Book::setPrice(double price)
{
    price = price;
}

string Book::convertDoubleToString(double number)
{
    return static_cast<ostringstream*>( &(ostringstream() << number) ) -> str();
}

// this should be output
string Book::getBookInfo()
{
    stringstream ss;
    ss << title << endl << convertDoubleToString(price) << endl;

    return ss.str();
}
4

2 に答える 2

3

変化する

void Book::setTitle(string  title)
{
    title = title;
}

void Book::setTitle(string  title)
{
    this->title = title;
}

そして、この種のコードが発生する場所ではどこでも同じ変更が行われます。title記述されているように、コードは引数の値を引数に割り当てますtitle。つまり、何もしません。コンパイラはおそらくこれについて警告しました。

または、@ hmjdが言ったように、引数の名前を変更します。

于 2012-09-02T19:33:20.227 に答える
2

たとえば、getBootInfo()から返されたデータをキャプチャする必要があります

string result = book.GetBookInfo();
cout << result;
于 2012-09-02T19:32:07.023 に答える