如何解决声明错误
How to resolve declaration errors
我正在尝试运行一个代码,该代码需要用户输入的标准时间并将其转换为军事时间。对于用户输入,可以将小时键入一个或两个数字,并且可以以任何方式键入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
。
,没有变量colon
和space
的声明。
此语句
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
中声明的标准名称代替合格名称。
- 在气泡排序程序中未声明错误功能
- 未在此范围内声明错误 'xy'
- 在此范围内未声明错误"Clreol"
- 为什么 C 编译器不在 for 循环体中给出重新声明错误?
- 如何修复范围内的字符串声明错误
- 如何修复C++中的"arrStud未在此范围内声明"错误
- 无法识别的模板声明错误 - 不明白我做错了什么
- C 如何从构造函数中声明(错误C2065未宣布的标识符)
- C 无法解释的类“尚未声明”错误,这是由于名称空间而导致的
- 如何解决声明错误
- 在标题文件中获取声明错误
- 异常声明错误
- "inet_ntoa"未声明错误
- #include <string> 导致很多'<blank>'尚未声明错误
- 类声明错误
- C++成员函数未声明错误时(当它看起来是错误时)
- 代码块 HelloWorld C 示例不起作用:未声明错误"ptrdiff_t"
- 头文件类成员函数声明错误:"incomplete type name in nested name specifier"
- 预期语句和预期声明错误 c++
- 针对 android 编译的问题..."未在此范围内声明"错误