“不能仅通过返回类型重载函数”错误

时间:2016-03-06 19:10:25

标签: c++

当涉及到我的功能时,我一直得到一个“不能通过单独的返回类型来重载功能” 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;
}

善待代码我仍然有点新鲜。提前谢谢。

1 个答案:

答案 0 :(得分:1)

在这一行:

string processOpen(char entryReturn);

编译器不知道string的含义。你应该在这里写std::string

显然,你的编译器猜到你拼错了int。 (编译器这些天很聪明,对吧?)。

然后,稍后你写了using namespace std;,然后是string processOpen(char entryReturn) {。此时,编译器在string内找到namespace std,并且它看到您已定义了两个具有相同名称和参数的函数,但其​​中一个返回int而另一个返回std::string },这是不允许的。

这是一个很好的例子,说明为什么你应该把注意力集中在编译器的第一个输出消息上(无论是“错误”还是“警告”,真的没有区别)。遇到错误后,编译器会猜到你的意思,并试图继续编译,但很明显,任何后续的消息都被这个猜测的结果所污染,如果猜不到的话。

修复第一条消息后,重新编译以查看其他“级联”消息是否也消失。