わかりましたので、このすべての演算子のオーバーロードについて混乱しています。構文は私にとって奇妙であり、とにかくプログラミングが得意ではありません。したがって、インターネットを見回すと、オブジェクトを使用して印刷する唯一の方法cout <<
は、それをオーバーロードすることだと思います。したがって、オブジェクトのベクトルがあり、通常、intまたは文字列の通常のベクトルがあれば、イテレータを使用してそれぞれを調べ、逆参照してその内容を出力しますが、そうは思いませんそのテクニックはオブジェクトに対して機能しています:-/これが私がこれまでに持っているものです...助けてください!
BarOne.h //my header file
#include <string>
#include <vector>
using namespace std;
class BarOne
{
private:
string name;
string type;
string size;
vector<BarOne> bar; //vector of BarOne objects
vector<BarOne>::iterator it; //iterator for bar
public:
BarOne(); //constructor
void addBottle(string, string, string); //adds a new bottle to bar
void revealSpace();
void printInventory();
friend ostream& operator<<(ostream& os, const BarOne& b);
};
私の実装は次のようになります。
BarOne.cpp //implementation
#include "BarOne.h"
#include <iostream>
#include <string>
using namespace std;
BarOne::BarOne()
{
//adding 4 default bottles
}
void BarOne::addBottle(string bottleName, string bottleType, string bottleSize)
{
name = bottleName;
type = bottleType;
size = bottleSize;
}
void BarOne::printInventory()
{
for (it = bar.begin(); it != bar.end(); ++it)
{
cout << *it << endl;
}
}
ostream& operator<<(ostream& os, const BarOne& b)
{
os << b.name << "\t\t\t" << b.type << "\t\t\t" << b.size;
return os;
}
では、メインで printInventory を呼び出しても何も起こらないのはなぜですか? オーバーロードが間違っていましたか?構文ミス?
これもメインです:
#include "BarOne.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{
string Tiqo, Peruvian, Wellington, Smooze;
string vodka;
string rum;
string whiskey;
string small;
string medium;
string large;
//default bottles
vector<BarOne> bar; //vector of BarOne objects
vector<BarOne>::iterator it; //iterator for bar
BarOne Inventory; //BarOne object
Inventory.addBottle(Tiqo, vodka, large);
bar.push_back(Inventory);
Inventory.addBottle(Peruvian, rum, medium);
bar.push_back(Inventory);
Inventory.addBottle(Wellington, vodka, large);
bar.push_back(Inventory);
Inventory.addBottle(Smooze, whiskey, small);
bar.push_back(Inventory);
^^^それはほんの一部です...残りは、プログラムの実行時にどのように表示されるかをフォーマットするだけです。わかりましたので、誰かが提案したようにクラスを分けてみます。AddBottle は、そのオブジェクトの情報をベクターに追加しますよね? 情報を取得し、それを変数の名前、タイプ、サイズに追加してから、ベクター「バー」に入れます。それともいいえ?