C++ 标记器-使用'初始化;{…}';应为聚合对象
我正致力于创建一个程序,它将占用一小部分,并将其降低到最低值。我使用一个标记器来解析字符串(在我的例子中,我是在读字符串),并将分子和分母分开 我得到了下面的错误,我正在寻找一个解释为什么它会发生。我曾经找过有类似问题的人,但我仍然是一个初学者,正在寻找解决问题的基本解释和建议C++ 标记器-使用'初始化;{…}';应为聚合对象,c++,C++,我正致力于创建一个程序,它将占用一小部分,并将其降低到最低值。我使用一个标记器来解析字符串(在我的例子中,我是在读字符串),并将分子和分母分开 我得到了下面的错误,我正在寻找一个解释为什么它会发生。我曾经找过有类似问题的人,但我仍然是一个初学者,正在寻找解决问题的基本解释和建议 RationalNum() // Default :numerator(0), denominator(1){} RationalNum(int num) // Whole Number :numerat
RationalNum() // Default
:numerator(0), denominator(1){}
RationalNum(int num) // Whole Number
:numerator(num), denominator(1){}
RationalNum(int num, int denom) // Fractional Number
:numerator(num), denominator(denom){}
RationalNum(string s)
{
int num = 0;
char str[] = s;
}
我知道问题在于将char数组设置为s
感谢您花时间查看此内容。您正在尝试将字符数组初始化为std::string,这是一个对象。该错误的字面意思是编译器希望初始化如下所示:
char str[] = {'1','2','3','4'};
但是,由于您正计划进行字符串操作,因此只保留字符串对象比尝试将其分配给char数组容易得多
您可以使用和,而不是从头开始构建解析器。使用“/”作为分隔符。通过在构造std::stringstream时将其作为参数传递,可以使用字符串初始化该std::stringstream。您还可以使用另一个stringstream来使用运算符将字符串转换为数字。如果
string
是std::string
则使用s.c_str()
从中获取const char*
。这大约相当于一个char[]
,但是常量。如果需要非const
访问,则需要复制字符串(例如strdup
)。谢谢,@mattmcnab。这就是我的意思!如果这是一个愚蠢的问题,我很抱歉,但我非常感谢你的回答!几天前,我们在课堂上做了一个示例,提供了一个示例字符串(例如“Hello,World!”),我知道分数的每一个值都取决于用户的输入。我知道stl tokeniser使用“硬编码”数组,我不知道如何使用字符串流。再次抱歉,如果这看起来非常基本,但我是一个完全的新手。@mike112,好的,我已经编辑了我的答案。我提供了getline的链接,其中显示了如何将它与您自己的分隔符一起使用的示例。stl标记器不仅接受硬编码字符串,而且采用char*(字符指针),它与硬编码字符串的类型相同,但它们也可以动态生成。事实上,您可以用char[]来“替换”char*。但是,stringstream总体上更有用,因此我建议删除strtok。