我目前在尝试在类头文件中创建结构时遇到很多问题。在公共访问者& mutators它说变量是'未声明的标识符',以及我不确定如何从主.cpp文件引用struct数组并将变量从打开的文件分配给struct数组中的元素。
//头文件
#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#药
答案 0 :(得分:2)
你只声明了bag的定义,但从不创建一个成员。
使包成为像
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;
...
};
现在你可以在main中创建一个bag
数组,如
Foo::bag items[1000];