无法标记字符串并将其传递给 C++ 中的结构

can't tokenize a string and pass it to struct in c++

我必须编写一个程序,其中我必须将时间 (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;
}

这是我遇到的错误

有什么帮助吗?

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

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

struct time Tokenized_time(string str)

而且只要您正在这样做,您还可以 get rid of using namespace std 以消除更多类似的头痛、困惑和不受欢迎的惊喜的机会。

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