当涉及到我的功能时,我一直得到一个“不能通过单独的返回类型来重载功能” string processOpen(char name) 而且我不确定为什么。我把程序切成了它的基本外壳,但仍然没有运气。任何帮助将不胜感激。
编译期间的实际视觉工作室错误说 “缺少类型说明符 - 假设为int。注意:C ++不支持default-int。
#include <iostream>
#include <string>
#include <fstream>
char openCommand();
string processOpen(char entryReturn);
bool logIn(string name);
bool addNewMember(string name);
void processQuit();
//Global Variables
string memberlist = "memberlist.txt";
string checkedOutList = "checkedoutbooks.txt";
using namespace std;
int main() {
char entryReturn = ' ';
string name;
while (entryReturn != 'q') {
entryReturn = openCommand();
name = processOpen(entryReturn);
}
return 0;
}
该功能看起来像
string processOpen(char entryReturn) {
bool allReadyThere = false;
string name = " ";
//This will process the <log in> selection
if (entryReturn == 'a')
{
cout << "Enter your first and last name" << endl;
cin.ignore();
getline(cin, name);
allReadyThere = logIn(name);
if (allReadyThere == false)
{
cout << "You need to register
as you don't have an account" << endl;
}
}
//This will process the <register> selection
else if (entryReturn == 'b')
{
cout << "Enter your first and last name" << endl;
cin.ignore();
getline(cin, name);
allReadyThere = addNewMember(name);
if (allReadyThere == true) {
cout << "you already have an account" << endl;
}
}
else if (entryReturn == 'q') {
processQuit();
}
else
{
cout << "This is a non working command";
}
return name;
}
善待代码我仍然有点新鲜。提前谢谢。
答案 0 :(得分:1)
在这一行:
string processOpen(char entryReturn);
编译器不知道string
的含义。你应该在这里写std::string
。
显然,你的编译器猜到你拼错了int
。 (编译器这些天很聪明,对吧?)。
然后,稍后你写了using namespace std;
,然后是string processOpen(char entryReturn) {
。此时,编译器在string
内找到namespace std
,并且它看到您已定义了两个具有相同名称和参数的函数,但其中一个返回int
而另一个返回std::string
},这是不允许的。
这是一个很好的例子,说明为什么你应该把注意力集中在编译器的第一个输出消息上(无论是“错误”还是“警告”,真的没有区别)。遇到错误后,编译器会猜到你的意思,并试图继续编译,但很明显,任何后续的消息都被这个猜测的结果所污染,如果猜不到的话。
修复第一条消息后,重新编译以查看其他“级联”消息是否也消失。