8

関数名 Foo::foo() を Foo::newfoo() に変更せずに Foo.cpp から 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.私の下手な英語で申し訳ありません。

4

2 に答える 2

15

free 関数の完全修飾名を使用します。

::foo();

関数名の前にある は、グローバル スコープ内に::ある名前で関数を呼び出すようにコンパイラに指示します。 free 関数他の名前空間にある場合は、名前空間を指定する完全修飾名を使用する必要があります。foo()
foo()

namespacename::foo();
于 2012-05-27T06:50:00.573 に答える
1

free 関数fooが何らかの namespacexyzで定義されている場合は、次のようにします。

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

または、これを行うだけです:

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

fooこれは、グローバル名前空間で定義されていると想定しています。

実装には名前空間を使用することをお勧めします。グローバル名前空間を汚染しないようにします。

于 2012-05-27T06:52:29.913 に答える