Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 标记器-使用'初始化;{…}';应为聚合对象_C++ - Fatal编程技术网

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。