1

快乐的编码员!

我计划今天尝试学习一些 C++,所以我想我可以从以前的课程中学习一个旧的 C 作业,然后用 C++ 做同样的事情。任务是读取音乐文件并从他们的 ID3 标签中检索数据,并根据他们的艺术家、专辑和曲目标题等将它们分类到文件夹中……这并不重要,但你至少知道我要做什么。

所以我玩了一些集合,让我的程序接收一个字符串数组,指定不同的歌曲,它将循环算法。

在下一步中,由于我如何尝试复制旧 C 程序的行为,我被卡住了,该程序是一个包含三个值的结构:

int size;
char *tag_name;
char *data;

但到目前为止,我一直无法在 C++ 中重新创建这种动态行为,我希望只定义成员但不初始化成员,因为我希望以后能够更改这些数据。从技术上讲,我可以通过在创建标签之前从文件中获取数据的方式来做到这一点,因此给构造函数它们的初始值并完成它。但是我可以按照我想要的方式去做吗?

class Tag {
 public:
   std::string name;
   std::string data;
   int size;

   Tag() {}
   Tag(std::string n, std::string d, int s) : name(n), data(d), size(s) { }
   void setData(std::string data) { this.data = data }
};

因为我已经尝试了十亿个指针组合和诸如此类的东西(谷歌加载),所以我刚刚回到上面并决定问你如何实际完成这个。

我的脑子完全糊涂了,但考虑一下上面的伪代码,因为我敢打赌它在任何方面都不正确......

所以我的问题是:如何定义一个类,以便为成员名称和数据获得动态字符串分配?我几乎在考虑使用一些好的旧 char*,但我尝试这样做的目的是学习一些 C++,所以我现在强迫自己经历这个。

4

1 回答 1

5

如果我正确理解了您的问题,那么您的默认构造函数已经解决了这个问题。您std::string的 s 将初始化为空字符串""。您可以随时为此分配不同的值string

如果你真的想要,你可以将你的默认构造函数更改为

Tag() : name(""), data(""), size(0) {}
于 2014-10-03T23:31:42.183 回答