功能参数太少(char *)

时间:2014-11-25 20:46:50

标签: c++ function arguments

我在一个学校项目工作,我正在编写游戏Hangman。 不允许使用面向对象的编程。 所以我只考虑了功能(聪明的男孩:D)。

现在我有了这个功能:

void LoadHangman();
int PlayHangman(char searchedWord[20], char platzhalter[8]);
int FindLengthFromString(char searchedWord[]);
int CheckIfLostOrWon();

在函数LoadHangman中,我启动了一个Word,以后可以从用户那里找到它。 我还发起了一个叫做占位符的字符,只是得到了'_'

char searchedWord[20] = {'H','a','n','g','m','a','n',0};
char placeholder[8] = {'_','_','_','_','_','_','_'};

现在我想转发(抱歉那个糟糕的英语)它到函数PlayHangman(...)

PlayHangman(searchedWord,placeholder);

现在,我启动PlayHangman(...)函数

int PlayHangman(char searchedWord[20],char placeholder[8])

编译器只是说: 在开始{从功能:

error: too few arguments to function 'int PlayHangman(char*, char*)'

最后}来自这个函数:

error: at this point in file

我对自己很生气,我很愚蠢,解决这个问题(这似乎是一个容易出问题......)

ps:我正在读一本C ++书......但是......我......只是......不......得......它......

孔代码,对于所有这些编程神:

#include <iostream>

using namespace std;

///Funktionsdeklarationen
void LoadHangman();
int PlayHangman(char searchedWord[20], char placeholder[8]);
int FindLengthFromString(char searchedWord[]);
int CheckIfLostOrWon();

int main()
{
    ///Deklarationen
    int won_lost = CheckIfLostOrWon();

    ///Programm
    LoadHangman();
    switch(won_lost)
    {
        case 1: cout << "\n\nGlückwunsch! Sie haben gewonnen!\n"; return 0;break;
        case -1: cout << "\n\nSchade. Sie haben leider nicht gewonnen.\n";return 0; break;
        default : break;
    }
}

void LoadHangman()
{
    ///Deklarationen
    char searchedWord[20] = {'H','a','n','g','m','a','n',0};
    char placeholder[8] = {'_','_','_','_','_','_','_'};
    int lengthFromString;

    ///Programm
    lengthFromString = FindLengthFromString(searchedWord);
    cout << "Gesuchtes Wort: ";

    for(int i = 0; i < lengthFromString; i++) {cout << " " << placeholder[i] << endl;}

    cout << "Bitte geben Sie einen Buchstaben ein: ";

    PlayHangman(searchedWord,placeholder);
}

int PlayHangman(char searchedWord[20],char placeholder[8])
{
    ///Deklarationen   / Initialisation
    int uebereinstimmung;
    int fehlerAnzahl = 0;
    char character;
    int lengthFromString = FindLengthFromString(searchedWord);

    uebereinstimmung = 0;

    ///Programm
    cin >> character;

    for(int i = 0; i < lengthFromString; i++)                                                           //Für die Länge des Strings
    {
        if(character != searchedWord[i]) {uebereinstimmung -= 1;}                                       //Übereinstimmung verringern
        else if(character == searchedWord[i]) {placeholder[i] = character; uebereinstimmung = 100;};     //Platzhalter mit Buchstaben füllen und übereinstimmung auf 100 setzen
    }

    if(uebereinstimmung < 0) {fehlerAnzahl++;};

    return fehlerAnzahl;

}

int CheckIfLostOrWon(char searchedWord[],char placeholder[])
{
    ///Deklarationen
    int lengthFromString = FindLengthFromString(searchedWord);
    int fehlerAnzahl = PlayHangman();

    ///Programm
    int won = 0;
    for(int i = 0; i < lengthFromString; i++)
    {
        if(placeholder[i] == searchedWord[i]) {won++;};
    }
    if(won == lengthFromString) {return 1;};
    switch(fehlerAnzahl)
    {
        case 8: return -1;
    }
}

int FindLengthFromString(char searchedWord[])
{
    ///Deklarationen
    int lengthFromString = 0;
    int i = 0;

    ///Programm
    while(searchedWord[i] != 0) {lengthFromString++; i++;}
    return lengthFromString;
}

对不起,评论是德语。

已经尝试过使用(指针)

int PlayHangman(char* searchedWord,char* placeholder)

不工作。

[其他人的结果]

我纠正了我的愚蠢行为:

int fehlerAnzahl = PlayHangman(searchingWord,placeholder);

谢谢大家。

3 个答案:

答案 0 :(得分:1)

PlayHangman函数需要2个参数

然而,当你试图打电话时,你不会传递任何论据:

int fehlerAnzahl = PlayHangman();

您需要将正确的参数发送到PlayHangman以解决此问题,编译器会在提示时提示您这是错误消息的问题:

error: too few arguments to function 'int PlayHangman(char*, char*)'

始终在启用所有警告的情况下进行编译,并注意任何警告和错误,因为这是使用编译器帮助您查找和修复问题的好方法。此外,如果这是一个真正的c ++项目,我强烈建议你使用std::sting存储你的字符串,这将使你的事情变得更容易。

答案 1 :(得分:1)

请参阅完整编译器错误消息:

k.cc: In function 'int CheckIfLostOrWon(char*, char*)':
k.cc:73:36: error: too few arguments to function 'int PlayHangman(char*, char*)'

     int fehlerAnzahl = PlayHangman();
                                    ^

这告诉你到底要去哪里。你在那个地方调用没有参数的PlayHangman函数。如果您的编译器没有指出错误的位置......那将是一个奇怪的编译器。

答案 2 :(得分:1)

第73行有一个PlayHangman()没有参数。正如您所提到的,您的PLayHangman()函数有两个参数,而总是必须传递两个参数。