„identificatorul este nedefinit” la apelarea funcției dintr-un fișier antet (Programare, C++)

avi1234 a intrebat.

Tot ce încerc să fac este să creez o clasă separată pentru a ține funcția Hello World (aceasta este pentru o clasă), dar primesc o eroare de compilare „identifier is undefined”. Care este problema?

Aici este funcția mea principală (helloworld.cpp):

#include <iostream>
using namespace std;

int main() {
    print_me();
    system("pause");
    return 0;
}

Și aici este clasa antet (helloworld.h) :

#include <iostream>

void print_me() {
    std::cout << "Hello World
";
}

Comentarii

  • Încercați să includeți același spațiu de nume în fișierul dvs. de clasă … –  > Por Hackerman.
  • Eroarea persistă în continuare, deci nu cred că aceasta este problema –  > Por avi1234.
  • ați #include fișierul helloworld.h în helloworld.cpp? –  > Por Vladimir.
  • În primul rând, de ce o numești „clasă”? Nu există clase în codul tău. În al doilea rând, ați definit o funcție într-un fișier antet. Acest lucru este în general incorect. De ce ați decis să plasați definiția de print_me într-un fișier antet? –  > Por AnT.
  • Urmăresc un curs online și am încercat să fac ceea ce era descris. Aceasta include plasarea print_me în fișierul header. –  > Por avi1234.
1 răspunsuri
MxNx

Nu ați inclus helloworld.h în helloworld.cpp. Ar trebui să funcționeze următorul cod:

#include <iostream>
#include "helloworld.h" 

using namespace std;

int main() {
     print_me();
     system("pause");
     return 0;
}

Un lucru de reținut este că, din punctul de vedere al compilatorului, nu există nicio legătură între cele două fișiere, cu excepția cazului în care o specificați. Faptul că ambele fișiere au același nume nu are nicio semnificație pentru compilator.

Nota 1: Luați în considerare utilizarea de protecții de includere în fișierele de antet. Pentru proiectele simple, s-ar putea să nu fie evident necesar, dar pentru proiectele mai mari, neutilizarea lor poate duce la erori de compilare ambigue și enervante.

Notă secundară 2: Implementarea corpurilor funcțiilor în fișierele de antet este în general descurajată.

Comentarii

  • Mulțumesc pentru ajutor, dar acum primesc un mesaj „cannot open source file „helloworld.h”. Ar trebui ca fișierul meu de antet să fie în folderul Source File sau în folderul Header File (unde se află în prezent)? –  > Por avi1234.
  • Aceasta este o altă întrebare și este mai bine să o pui într-un alt mesaj, deoarece această problemă poate avea cauze diferite. Totuși, puneți cele două fișiere în același director și invocați compilatorul din acel director? Încercați să folosiți calea completă a fișierului de antet în declarația de includere, ceva de genul #include "/path/to/helloworld.h". –  > Por MxNx.
  • Nu am idee care a fost problema, dar dacă autocompletez „helloword.h”, funcționează, chiar dacă instrucțiunea de includere reală este identică. Mulțumesc pentru tot ajutorul! Acum este conformă. –  > Por avi1234.

Tags: