wake-up-neo.com

Fehler beim Funktionsaufruf nicht gefunden

Ich habe hier ein Programm, bei dem ich den Fall einer eingegebenen Zeichenfolge invertiere. Dies ist der Code in meiner CPP-Datei, und ich verwende Visual Studio C++ IDE. Ich bin mir nicht sicher, was ich in einer Header-Datei brauche oder ob ich eines brauche, um dies zu erreichen.

Fehler bei meinem Funktionsaufruf swapCase. Main sieht swapCase nicht aus irgendeinem Grund, aus dem ich nicht sicher bin.

#include <cctype>
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    char name[30];
    cout<<"Enter a name: ";
    cin.getline(name, 30);
    swapCase(name);
    cout<<"Changed case is: "<< name <<endl;
    _getch();
    return 0;
}

void swapCase (char* name)
{
    for(int i=0;name[i];i++)
    {
        if ( name[i] >= 'A' && name[i] <= 'Z' )
            name[i] += 32; //changing upper to lower
        else if( name[i] >= 'a' && name[i] <= 'z')
            name[i] -= 32; //changing lower to upper
    }
}

Alle anderen Tipps zur Syntax oder Semantik sind willkommen. 

44
KRB

Fügen Sie diese Zeile vor der Hauptfunktion hinzu:

void swapCase (char* name);

int main()
{
   ...
   swapCase(name);    // swapCase prototype should be known at this point
   ...
}

Dies wird als Forward-Deklaration bezeichnet: Der Compiler muss den Funktionsprototyp kennen, wenn der Funktionsaufruf kompiliert wird.

72
Alex F

Im Gegensatz zu anderen Sprachen, an die Sie vielleicht gewöhnt sind, muss alles in C++ deklariert werden, bevor es verwendet werden kann. Der Compiler liest Ihre Quelldatei von oben nach unten. Wenn er also zum Aufruf von swapCase kommt, weiß er nicht, was es ist, und Sie erhalten einen Fehler. Sie können Ihre Funktion vor main mit einer Zeile wie folgt deklarieren:

void swapCase(char *name);

oder Sie können einfach die gesamte Funktion vor main in der Datei verschieben. Machen Sie sich keine Sorgen, die scheinbar wichtigste Funktion (main) am Ende der Datei zu haben. Dies ist in C oder C++ üblich.

16

Wenn der Compiler in main () auf den Aufruf von swapCase stößt, weiß er nicht über die Funktion swapCase und meldet einen Fehler. Sie können entweder die definition von swapCase über main oder declare swap case über main verschieben:

void swapCase(char* name);

Die 32 in swapCase bewirkt auch, dass der Leser pausiert und sich wundert. Der Kommentar hilft! In diesem Zusammenhang würde das Schreiben klarer

if ('A' <= name[i] && name[i] <= 'Z')
    name[i] += 'a' - 'A';
else if ('a' <= name[i] && name[i] <= 'z')
    name[i] += 'A' - 'a';

Die Konstruktion in meinen If-Tests ist eine Frage des persönlichen Stils. Ihre waren gut. Die Hauptsache ist die Art und Weise, wie der Name [i] geändert werden kann - der Unterschied in 'a' vs. 'A' macht das Geschehen offensichtlicher, und niemand muss sich fragen, ob die '32' tatsächlich stimmt.

Viel Glück beim Lernen!

8
Kevin Hopps

Sie müssen void swapCase vor der Hauptdefinition definieren.

0
v01d