0

私は現在、クラス ヘッダー ファイルで構造体を作成しようとする際に多くの問題を抱えています。パブリックアクセサーとミューテーターでは、変数は「宣言されていない識別子」であり、メインの.cppファイルから構造体配列を参照し、開いているファイルから変数を構造体の要素に割り当てる方法がわかりません配列。

//ヘッダーファイル

#ifndef FOO_H
#define FOO_H
#include <string>
#include <iostream>
using namespace std;

class Foo
{
private:
    struct bag
    {
        string name;
        int amount;
        enum tax { food, medicine } type;
    };
public:
    //Unsure about constructor with enum type
    string getName() const
        { return name; }
    int getAmount() const
        { return amount; }

    void setItem(string);
    void setAmount(int);
    void setTaxCat(int);
};

static const float foodTax = .05, medicineTax = .04;
#endif

//実装ファイル

#include "Foo.h"
#include <string>
using namespace std;

void Foo::setItem(string item)
{ name = item; }
void Foo::setAmount(int qty)
{ amount = qty; }
void Foo::setTaxCat(int tx)
{ type = static_cast<tax>(tx); }

//メインプログラム

#include "Foo.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    string item;
    int qty;
    int tx;
    ifstream inputFile;
    string fileName;
    const in size = 20;

    cout << "Enter file name: ";
    getline(cin, fileName);
    inputFile.open(fileName.c_str(), ios::in);

    bag items[]  //Unsure how to create array from the struct in the class header file

    for(int index = 0; index < size; index++)
    {
        while(index < size && !inputFile.eof())
        {
            getline(inputFile, item, '#');
            items[index]->setItem(item);  //unsure how to send items to 

            getline(inputFile, qty, '#');
            items[index]->setAmount(qty);

            getline(inputFile, tx, '#');
            items[index]->setTaxCat(tx);
        }
    }
    inputFile.close();
    return 0;
}

これが参照しているファイルの例です

卵#12#食べ物

咳止め#2#薬

4

1 に答える 1

2

バッグの定義を宣言するだけで、メンバーとして作成しないでください。
バッグをメンバーライクにする

    struct bag
    {
        string name;
        int amount;
        enum tax { food, medicine } type;
    } b;
//    ^^

あなたの方法は次のようになります

string getName() const
    { return b.name; }
int getAmount() const
    { return b.amount; }
...

bこれらの醜いゲッターを取り除くために、パブリックメンバーとしてお勧めしますが

型は非公開なのでbag、こうしないと配列にできません

class Foo {
  friend int main();
  private:
    struct bag {
    ...
    }b;
  ...
};

bagメインのような配列を作成できるようになりました

Foo::bag items[1000];
于 2013-05-01T20:03:25.030 に答える