2011-11-22 22 views
45
#include <iostream> 

using namespace std; 

int main() 
{ 
    HelloWorld(); 
    return 0; 
} 

void HelloWorld() 
{ 
    cout << "Hello, World" << endl; 
} 

Ben ++ g ile aşağıdaki derleme hatası alıyorum:HelloWorld işlevim neden bu kapsamda açıklanmadı?

l1.cpp: In function 'int main()': 
l1.cpp:5:15: error: 'HelloWorld' was not declared in this scope 
+6

Bu sorunun StackExchange'ı "Sıcak Soru" olarak nasıl çektiğini seviyorum. – surfasb

+2

olası kopyası [Neden herhangi bir sınıf beyanı olmadan prototip gereklidir?] (Http://stackoverflow.com/questions/8199081/why-prototype-is-required-even-without-any-class-declaration) –

cevap

81

Sen beyan veya kullanmadan önce işlevini tanımlamak gerek duyarsınız. Aksi halde, HelloWorld()'un bir işlev olarak var olduğunu bilmiyor.

ana işlevi önce bu ekleyin:

void HelloWorld(); 

Alternatif olarak, önce HelloWorld() tanımını hareket edebilir main(): Daha önce fonksiyonun bir prototip bulunması gerekmektedir

#include <iostream> 
using namespace std; 

void HelloWorld() 
{ 
    cout << "Hello, World" << endl; 
} 

int main() 
{ 
    HelloWorld(); 
    return 0; 
} 
9

önleme veya ondan önceki tüm işlev.

void HelloWorld(); 

int main() { 
    HelloWorld(); 
    return 0; 
} 

void HelloWorld() { 
    cout << "Hello, World" << endl; 
} 

Ve ikinci yoludur::

Yani ilk

void HelloWorld() { 
    cout << "Hello, World" << endl; 
} 

int main() { 
    HelloWorld(); 
    return 0; 
} 
15

Sen HelloWorld() yüzden main ne olduğunu bilir beyan iletmek gerekir. Öyleyse:

#include <iostream> 
using namespace std; 
void HelloWorld(); 
int main() 
{ 
    HelloWorld(); 
    return 0; 
} 
void HelloWorld() 
{ 
    cout << "Hello, World" << endl; 
} 
4

Bu işlevi ana işlevden önce yapmanız gerekir. kullanmadan önce

19

Sen fonksiyonunu beyan etmelidir:

#include <iostream> 

using namespace std; 

void HelloWorld(); 

int main() 
{ 
    HelloWorld(); 
    return 0; 
} 

void HelloWorld() 
{ 
    cout << "Hello, World" << endl; 
} 

veya main()

+0

bildirmeden önce bir sınıf üyesi kullanabilir. Yani bu açıklama tatmin edici değil. – Walter

+14

@Walter Benim açıklamam özellikle onun problemini kapsar ve yeni olduğu için, ona çok fazla bilgi akıtan bir nokta yoktur. – Nasreddine

2

Yeniden düzenle yüzden göründüğünü HelloWorld() önce HelloWorld() tanımını taşıyabilirsiniz main() önce:

#include <iostream> 
using namespace std; 
void HelloWorld() 
{ 
    cout << "Hello, World" << endl; 
} 
int main() 
{ 
    HelloWorld(); 
    return 0; 
} 
5

Tüm bu cevaplar doğru, ama gariptir, bu işe yarardı:

struct Hello { 
    static int main() { World(); return 0; } /* note: World() not declared yet */ 
    static void World() { std::cout<<"Hello World"; } 
}; 
int main() { return Hello::main(); } 
+1

Garip bir şey yoktur, sınıfın tüm üyeleri üye işlevleri gövdesinde zaten tanımlanmıştır. –

+0

@Gene Hemen açık değil (bir başlangıç ​​/ yabancıya) neden isim-alan X {int a() {return b;} int b; } 'bir sorunumuz var, ama 'class' ile 'namespace' yerini alırsak (ve sonunda'; 'ekleyelim). – Walter

8

yani extern bildirimi kullanarak, söz nedense kimse için bir daha olasılığı vardır: Eğer ad kapsamı içine fonksiyonun adını tanıtmak istemiyorum

#include <iostream> 
using namespace std; 
int main() 
{ 
    extern void HelloWorld(); 
    HelloWorld(); 
    return 0; 
} 
void HelloWorld() 
{ 
    cout << "Hello, World" << endl; 
} 

Bu tercih edilir. C++ 'da

3

adreslerini çağırmadan önce tanımlamanız veya en azından bildirmeniz gerekir.Yani

int main() 
{ 
    cout << b; 
    int b = 10; 
} 

da böyle çalışıyor olabilir:

böyle bir şey Şimdi ne kadar yapmaya çalışıyorsun olduğunu

#include <iostream> 
using namespace std; 

void HelloWorld(); 

int main() 
{ 
    HelloWorld(); 
    return 0; 
} 
void HelloWorld() 
{ 
    cout << "Hello, World" << endl; 
} 

Diğer tüm tanımlamak için C++ iyi bir uygulamadır Ana fonksiyondan önce fonksiyonlar.

İlgili konular