【问题标题】:can't tokenize a string and pass it to struct in c++无法标记字符串并将其传递给 c++ 中的 struct
【发布时间】:2021-02-14 11:06:57
【问题描述】:

我必须编写一个程序,其中我必须将 time(hh:mm:ss) 作为字符串输入并使用 : 作为分隔符并将小时、分钟和秒传递给结构时间,然后显示总数秒数。我已经编写了代码,但它给了我无法理解的错误。这是代码:

#include<iostream>
#include<string>
using namespace std;

struct time{
   int hours;
   int minutes;
   int seconds;
  
   void Print_in_Seconds(){
       cout<<"Total Second: "<<hours*3600+minutes*60+seconds;
   }
};

time Tokenized_time(string str)
{
   time time_;
   // Get hours
   int hour1 = (int)str[1] - '0';
   int hour2 = (int)str[0] - '0';
   int hour = (hour2 * 10 + hour1 % 10);
   int count=0;
   int minute=0,second=0;
   for (int i=3; i <= 7; i++){
       if(i==3 || i==4){
       minute=minute*10+((int)(str[i]-'0'));  
       }
       else if(i==6 || i==7){
       second=second*10+((int)(str[i]-'0'));  
       }
   }
   time_.hours=hour;
   time_.minutes=minute;
   time_.seconds=second;
   return time_;

}

// Driver code
int main()
{
   time time1;
   cout<<"Enter Time- 00:00:00 Formate: ";
   string str;
   cin>>str;
   time time1=Tokenized_time(str);
   time1.print();
return 0;
}

这是我遇到的错误

有什么帮助吗?

【问题讨论】:

  • stackoverflow.com/questions/1452721/… 的一个很好的例子。 std::time 已经作为一个函数存在并且你拉入了整个 std 命名空间。
  • @Darhuuk 我应该删除它吗?
  • 不,你的问题在别处。
  • @Darhuuk 我也是这么想的,但还是complains
  • 这是 gcc 和 clang 中的一个错误。无论您是否使用using namespace std,它们都会引入全局::time 函数(他们绝对不应该这样做)。

标签: c++ string struct token


【解决方案1】:

time 恰好是标准 C 库中的函数名称(并合并到 C++ 库中),并且通过将您的 struct 命名为相同,您正在创建歧义,并且根据语法规则C++的,编译器必须考虑time到函数名,这里,导致编译错误。

最简单的解决方案是为您的struct 选择一个不同的名称。您还可以指示编译器将 time 显式解析为类型:

struct time Tokenized_time(string str)

而且,只要你在做,不妨get rid of using namespace std,以消除更多类似头痛、困惑和不受欢迎的意外的机会。

编辑:很可能这是libstc++ 中的一个错误,但除了坐等gcc 修复这个错误外,您无能为力。但是您可能可以像这样更快地解决它...

【讨论】:

  • 您可能想提到这是一个编译器错误。 time 在不包含它的情况下不应该可见。
  • 除了 Sam 提到的之外,你在调用 Tokenized_time()print 后重新定义了 time1 也不是结构的一部分 Print_in_Seconds() 所以 time1.print() won'不行。
  • 我的代码有效,但输出错误。它应该将时间转换为秒,但它给出了错误的答案。你能帮忙吗?
  • @magmine 是的,我更正了那个打印的东西。代码现在可以运行,但输出错误
  • 请每个 stackoverflow.com 问题一个问题。欢迎您发布另一个问题,但请记住,您必须满足minimal reproducible example 的所有要求,并且问题中的所有信息都应该是纯文本,没有图像或指向外部网站的链接(您有点违反这个规则在这里,一点点)。
猜你喜欢
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
相关资源
最近更新 更多