C++ 如何解决声明错误
我试图运行一个代码,需要用户输入的标准时间,并将其转换为军事时间。对于用户输入,小时数可以键入一位或两位数字,AM/PM可以以任何方式键入。因此,我的守则如下:C++ 如何解决声明错误,c++,scope,compilation,declaration,stdstring,C++,Scope,Compilation,Declaration,Stdstring,我试图运行一个代码,需要用户输入的标准时间,并将其转换为军事时间。对于用户输入,小时数可以键入一位或两位数字,AM/PM可以以任何方式键入。因此,我的守则如下: #include <iostream> #include <string> using namespace std; string time, hour, minute, amPm, miltime; char amPmCheck; int main() { cout<<"Enter
#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;
}
我对编程还比较陌生,因此,如果您能提供我的错误是什么以及最简单的修复方法,我将不胜感激。这里有几个问题,首先:
- 改变
void timeConversion(小时、分钟、安培检查)
到
void timeConversion(字符串和小时、字符串和分钟、字符串和amPmCheck)
如果你想处理函数参数
- 或者将相同的功能(在您的情况下为更好的选项)更改为:
void timeConversion()
因为您正在处理全局变量
- 将
函数置于timeConversion
之前,或使用如下预声明:main
void timeConversion()代码>
也在main
功能之前
请阅读关于C++的好书。
初学者不必声明这些变量为命名空间变量。< /P>
string time, hour, minute, amPm, miltime;
char amPmCheck;
如果函数main
,则应将它们声明为局部变量
并且没有变量冒号
和空格
的声明
此声明
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');
hour.insert(0, '0');
hour.assign(12+int(hour));
使用了多字节字符文本。看来你的意思是双引号
hour.assign("00");
这同样适用于该语句
hour.assign('00');
hour.insert(0, '0');
hour.assign(12+int(hour));
此声明
hour.assign('00');
hour.insert(0, '0');
hour.assign(12+int(hour));
也没有道理
代码中的错误太多
您应该首先阅读类std::basic_string
的文档,了解如何使用它的方法
不要用嘲弄的语言
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
中声明的标准名称使用限定名称,您需要在此处输入参数的类型void timeConversion(小时、分钟、amPmCheck)
并将整个函数定义移动到main()
之前。您应该得到一个。这将大大加快您的学习进度。string time
将time
重命名为其他内容。名称time
已被占用。例如,使用<代码> TimeSTR< <代码>。请学习C++的类型系统。编译器实际上告诉你正在发生的事情:<代码> STD::字符串时间“重新声明为不同类型的符号< /代码>,后面是前一个声明“TimeTyt时间(TimeTy*)”< /C>。因此,标识符时间
已经用于其他目的。以后,请仔细阅读编译器错误消息。它们过去非常神秘,但现代编译器在这方面做得更好。