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在 main 中创建一个数组

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