【问题标题】:too few arguments to function (char*) [closed]函数的参数太少(char *)[关闭]
【发布时间】:2015-01-24 00:39:06
【问题描述】:

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

现在我有了这个功能:

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

在函数 LoadHangman 中,我启动了一个 Word,稍后应该从用户那里找到它。 我还发起了一个名为 placeholder 的字符数组,它刚刚得到了 '_'

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++ 书……但是……我……只是……不……明白……它……

Hole Code,献给所有这些编程之神:

#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;
}

抱歉,cmets 是德语的。

已经尝试使用(指针)

int PlayHangman(char* searchedWord,char* placeholder)

也不能正常工作。

[其他人的结果]

我纠正了我的愚蠢:

int fehlerAnzahl = PlayHangman(searchedWord,placeholder);

谢谢大家。

【问题讨论】:

  • CheckIfLostOrWon 需要在每个可能的路径中为return 一个值(当前如果fehlerAnzahl 不是8 那么它会掉到最后,这会导致未定义的行为)
  • 你的int fehlerAnzahl = PlayHangman(); 是错误的。你调用你的函数没有参数。没有参数小于 2 :-)
  • 为什么你在控制块后面的几个地方有一个空的stamement ;?此外,CheckIfLostOrWon 并不总是返回值。 warning: control reaches end of non-void function [-Wreturn-type]

标签: c++ function arguments


【解决方案1】:

PlayHangman 函数需要 2 个参数

但是,当您尝试调用它时,您不会向它传递任何参数:

int fehlerAnzahl = PlayHangman();

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

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

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

【讨论】:

  • 谢谢!我没看到(dump),我们不允许使用“完成”的函数,但是 cout 和 cin;
【解决方案2】:

查看完整的编译器错误消息:

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 函数时在该位置不带任何参数。如果你的编译器没有指出错误在哪里......那将是一个奇怪的编译器。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 2010-12-16
      • 2017-04-01
      相关资源
      最近更新 更多