如何解决声明错误

How to resolve declaration errors

本文关键字:声明 错误 解决 何解决      更新时间:2023-10-16

我正在尝试运行一个代码,该代码需要用户输入的标准时间并将其转换为军事时间。对于用户输入,可以将小时键入一个或两个数字,并且可以以任何方式键入AM/PM。鉴于此,我拥有的代码如下:

#include <iostream>
#include <string>
using namespace std;
string time, hour, minute, amPm, miltime;
char amPmCheck;
int main()
{
    cout<<"Enter time:n";
    cin>>time;
    colon = time.find(':');
    space = time.find (' ');
    hour = time.substr(0, colon);
    minute = time.substr(colon + 1, space);
    amPm = time.substr(space, back);
    amPmCheck = amPm[0];
    timeConversion(hour, minute, amPmCheck);
    return 0;
}

void timeConversion(hour, minute, amPmCheck)
{
    if(amPmCheck == 'a'||'A')
    {
        if(int(hour) == 12)
        {
            hour.assign('00');
        }
        else if (int(hour) <= 9)
        {
            hour.insert(0, '0');
        }
    }
    else
        if(int(hour) < 12)
        {
            hour.assign(12+int(hour));
        }
    miltime = hour + minute
    cout<< "Corresponding military time is", miltime;
}

但是,在尝试编译代码时,我从所选编译器中获取以下错误:

main.cpp:50:25: warning: multi-character character constant [-Wmultichar]
             hour.assign('00');
                         ^~~~
main.cpp:15:8: error: 'std::string time' redeclared as different kind of symbol
 string time, hour, minute, amPm miltime;
        ^~~~
In file included from /usr/include/pthread.h:24:0,
                 from /usr/include/x86_64-linux-gnu/c++/6/bits/gthr-default.h:35,
                 from /usr/include/x86_64-linux-gnu/c++/6/bits/gthr.h:148,
                 from /usr/include/c++/6/ext/atomicity.h:35,
                 from /usr/include/c++/6/bits/ios_base.h:39,
                 from /usr/include/c++/6/ios:42,
                 from /usr/include/c++/6/ostream:38,
                 from /usr/include/c++/6/iostream:39,
                 from main.cpp:10:
/usr/include/time.h:192:15: note: previous declaration 'time_t time(time_t*)'
 extern time_t time (time_t *__timer) __THROW;
               ^~~~
main.cpp:44:21: error: variable or field 'timeConversion' declared void
 void timeConversion(hour, minute, amPmCheck)
                     ^~~~
main.cpp:44:35: error: 'amPmCheck' was not declared in this scope
 void timeConversion(hour, minute, amPmCheck)
                                   ^~~~~~~~~

我仍然对编程相对较新,因此,关于我的错误是什么以及最简单的解决方法的任何信息将不胜感激。

这里几乎没有问题,首先:

  • 更改

void timeConversion(hour, minute, amPmCheck)

to

void timeConversion(string & hour, string & minute, string & amPmCheck)

如果要处理功能参数

  • 或更改相同的功能(在您的情况下更好(为:

void timeConversion()

因为无论如何您都在处理全局变量。

  • timeConversion功能放在main之前或使用以下前陈述:

void timeConversion();

也在main函数之前。

ps。请阅读有关C 的好书。

对于初学者,无需将这些变量声明为命名空间变量。

string time, hour, minute, amPm, miltime;
char amPmCheck;

如果功能main

,应将它们声明为本地变量

,没有变量colonspace的声明。

此语句

amPm = time.substr(space, back);

没有意义。变量amPm被声明为具有类型char而不是类型std::string

功能声明

void timeConversion(hour, minute, amPmCheck)

是错误的。您没有指定函数参数的类型。

这样的语句

    if(int(hour) == 12)

没有意义。您必须至少使用标准函数std::stoi将类型std::string的对象转换为类型int的对象。

在语句中

hour.assign('00');

使用了多重char文字。看来您的意思是双引号

hour.assign("00");

同样有效的语句

hour.insert(0, '0');

此语句

hour.assign(12+int(hour));

也没有意义。

您的代码中有太多错误。

您首先应该阅读std::basic_string类的文档以了解如何使用其Nethods。

并且不使用衍生的

using namespace std;

这可能是矛盾声明错误的原因。例如,请参见编译器的错误消息

main.cpp:15:8: error: 'std::string time' redeclared as different kind of symbol
 string time, hour, minute, amPm miltime;
        ^~~~
In file included from /usr/include/pthread.h:24:0,
                 from /usr/include/x86_64-linux-gnu/c++/6/bits/gthr-default.h:35,
                 from /usr/include/x86_64-linux-gnu/c++/6/bits/gthr.h:148,
                 from /usr/include/c++/6/ext/atomicity.h:35,
                 from /usr/include/c++/6/bits/ios_base.h:39,
                 from /usr/include/c++/6/ios:42,
                 from /usr/include/c++/6/ostream:38,
                 from /usr/include/c++/6/iostream:39,
                 from main.cpp:10:
/usr/include/time.h:192:15: note: previous declaration 'time_t time(time_t*)'
 extern time_t time (time_t *__timer) __THROW;
               ^~~~

在名称空间std中声明的标准名称代替合格名称。