Tokenizer - 使用' {...}'进行初始化期望的聚合对象

时间:2014-10-08 22:07:04

标签: c++

我正在努力创建一个程序,该程序将花费一小部分并将其降低到它的最低项。我使用了一个标记生成器来解析字符串(在我的情况下,我在一个字符串中读取)并将分子与分母分开。

我收到了以下错误,正在寻找解释原因的原因。我已经找到了有类似问题的人,但我仍然是一个初学者,正在寻找一种基本的解释和建议来寻找替代解决方法。

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。

感谢您抽出时间来研究这个问题。

1 个答案:

答案 0 :(得分:1)

您正在尝试将char数组初始化为std :: string,这是一个对象。错误的字面含义是编译器期望初始化看起来像这样:

char str[] = {'1','2','3','4'};

但是,由于你计划进行字符串操作,你可以更容易地保留字符串对象,而不是试图将它分配给char数组。

您可以使用string streamgetline,而不是从头开始构建解析器。用' /'作为你的分隔符。您可以通过在构造时将其作为参数传递来初始化带有字符串的std :: stringstream。您还可以使用另一个字符串流将字符串转换为使用>>运算符的数字。