gpt4 book ai didi

类定义中结构数组的 C++ 问题

转载 作者:行者123 更新时间:2023-11-28 03:17:45 27 4
gpt4 key购买 nike

我目前在尝试在类头文件中创建结构时遇到很多问题。在公共(public)访问器和修改器中,它说变量是“未声明的标识符”,而且我不确定如何从主 .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#medicine

最佳答案

你只声明一个包的定义,但永远不会创建一个作为成员。
让包成为成员(member)喜欢

    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 作为公共(public)成员以摆脱那些丑陋的 setter/getter

因为 bag 类型是私有(private)的,除非你这样做,否则你不能将它组成一个数组

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

现在你可以在 main 中创建一个 bag 数组

Foo::bag items[1000];

关于类定义中结构数组的 C++ 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16325484/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com