2012-05-27 16 views
7

क्या Foo.cpp से foo :: foo() को foo :: foo() को फ़ू :: newfoo() में बदलने के बिना foo() फ़ंक्शन को कॉल करना संभव है।समान नाम फ़ंक्शन को कॉल करना

main.cpp

#include <iostream> 
#include "Foo.hpp" 

class Foo { 
public: 
    void foo() { 
     std::cout << "Foo::foo\n"; 
    } 
    void bar() { 
     std::cout << "Foo::bar\n"; 
     foo();// need to call foo() function from foo.cpp not Foo::foo() 
    } 
}; 

int main() { 
    Foo f; 
    f.bar(); 
    return 0; 
} 

Foo.hpp

#ifndef FOO_HPP_INCLUDED 
#define FOO_HPP_INCLUDED 

void foo(); 

#endif // FOO_HPP_INCLUDED 

Foo.cpp मेरे गरीब अंग्रेजी के लिए

#include "Foo.hpp" 
#include <iostream> 
void foo(){ 
    std::cout << "foo\n"; 
} 

ps.sorry।

+0

क्या यह वास्तव में समस्या का वर्णन करता है? जैसा लिखा है, Foo.cpp केवल 'foo' नाम की एक परिभाषा को देखता है। एकमात्र संघर्ष 'main.cpp' में 'शून्य Foo :: foo()' की परिभाषा के अंदर है। यही जवाब उत्तर देने लगते हैं। – Potatoswatter

उत्तर

14

नि: शुल्क फ़ंक्शन का पूरी तरह से योग्य नाम का उपयोग करें।

::foo(); 

:: समारोह नाम के सामने, संकलक नाम foo() वैश्विक क्षेत्र में है कि द्वारा समारोह कॉल करने के लिए कहता है।
यदि नि: शुल्क फ़ंक्शन foo()किसी अन्य नामस्थान में था, तो आपको नेमस्पेस निर्दिष्ट करने वाले पूर्ण योग्य नाम का उपयोग करने की आवश्यकता है। सिर्फ ऐसा करने

xyz::foo(); //if foo is defined in xyz namespace 

वरना:

namespacename::foo(); 
1

मुक्त समारोह foo कुछ नाम स्थान xyz में परिभाषित किया गया है, तो यह है

::foo();  //if foo is defined in the global namespace 

यह एक मान लिया गया foo में परिभाषित किया गया है वैश्विक नामस्थान।

आपके कार्यान्वयन के लिए नामस्थान का उपयोग करना बेहतर है। वैश्विक नामस्थान प्रदूषण से बचें।

संबंधित मुद्दे