Identifier niet gevonden Fout op functie-oproep

Ik heb hier een programma waar ik het geval van een ingevoerde tekenreeks invert. Dit is de code in mijn .cpp-bestand en ik gebruik Visual Studio C++ IDE. Ik weet niet zeker wat ik nodig heb in een header-bestand of als ik er een nodig heb om dit werk te maken.

Fout met mijn functie-oproepwissel. Hoofd ziet geen swapcase om de een of andere reden dat ik niet zeker ben.

#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 andere tips voor syntaxis of semantiek worden op prijs gesteld.


Antwoord 1, Autoriteit 100%

Voeg deze regel toe voor de hoofdfunctie:

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

Dit wordt de aangifte van FORWARD genoemd: Compiler moet het functietype van de functie kennen wanneer de functie-oproep is samengesteld.


Antwoord 2, Autoriteit 23%

In tegenstelling tot andere talen moet u gewend zijn, alles in C++ moet worden verklaard voordat het kan worden gebruikt. De compiler leest uw bronbestand van boven naar beneden, dus wanneer het naar de oproep naar swapCase, weet het niet wat het is, zodat u een foutmelding krijgt. U kunt uw functie voor de main met een lijn als volgt verklaren:

void swapCase(char *name);

Of u kunt eenvoudig het geheel van die functie verplaatsen voor de main in het bestand. Maak je geen zorgen over het hebben van de ogenschijnlijk meest belangrijke functie (hoofd) onderaan het bestand. Het is heel gebruikelijk in C of C++ om dat te doen.


Antwoord 3, Autoriteit 9%

Op het moment dat de compiler de oproep ondervindt in Main (), weet het niet van de functie-swapcase, dus het rapporteert een fout. U kunt de -definitie van Swapcase boven Main of wijzigen Swap Case boven Main:

void swapCase(char *name);

Ook de 32 in swapcase zorgt ervoor dat de lezer pauzeert en verwondert. De opmerking helpt! In deze context zou het duidelijkheid toevoegen om

te schrijven

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

De constructie in mijn IF-tests is een kwestie van persoonlijke stijl. De jouwe waren prima. Het belangrijkste is de manier om de naam [I] te wijzigen – het gebruik van het verschil in ‘A’ vs. ‘A’ maakt het duidelijker wat er aan de hand is, en niemand zal zich afvragen of de ’32’ eigenlijk correct is.

Veel geluk leren!


Antwoord 4

U moet void-swapcase definiëren vóór de hoofddefinitie.

Other episodes