2

私のプログラムには 2 つのライブラリが含まれており、どちらも同じ関数名を持っていますが、両方を使用できるようにする必要がありますが、どちらを参照しているかを知るために C++ も必要です (特定の場所でのみ参照します)。どちらか一方)。私がこれを行っている理由は、私が独自のライブラリを作成していて、関数に特定の名前を付けたいためですが、それらは私が含めた他の誰かのライブラリの関数と競合しており、さらに悪いことに、いくつかの私のライブラリ内の私の関数の実際には、同じ名前を持つ他の人のライブラリ内の関数を使用します。

ちなみに、私のライブラリは単なる .h/.cpp ファイルです。また、MY 関数を呼び出すときに、myNameSpace::myFunc() などの余分な荷物は必要ありません。myFunc() と呼びたいだけです。ただし、名前空間を使用して他の人の関数を呼び出すことは気にしません (ただし、何かを壊した場合に備えて、他の人のライブラリを変更したくありません)。(私はC ++がまったく初めてです)

HERES MY NEW (TEST - SO FAR) CODE : NOT WORKING W/ ERRORS: error C2668: 'myFunc' : オーバーロードされた関数へのあいまいな呼び出し

メインプログラム.cpp

    #include "otherslib.h"
    #include "mylib.h"
    #include <iostream>

    using namespace myNamespace;

    int main(){

        std::cout << myFunc() << std::endl;

        return 0;
    }

mylib.h

    #pragma once

    namespace myNamespace{
        int myFunc();
    }

mylib.cpp

    #include "mylib.h"

    namespace myNamespace{
        int myFunc(){
            return 1;
        }
    }

その他lib.h

    #pragma once

    int myFunc();

その他lib.cpp

    #include "otherslib.h"

    int myFunc(){
        return 0;
    }
4

1 に答える 1

4

関数を名前空間で定義し、それらを呼び出すときに名前空間を使用する必要があります。

namespace myNamespace
{
    int myFunc(etc) { ... }
}

int main() {
    cout << myNamespace::myFunc();
}

名前空間を常に指定する必要がないようにするには、次のようにします。

namespace myNamespace
{
    int myFunc(etc) { ... }

    int main() 
    {
        // Call your own myFunc:
        myFunc();

        // Call their myFunc:
        ::myFunc();
    }
}
于 2013-04-09T03:57:25.723 に答える