2

我的程序中包含两个库,它们都具有相同的函数名称,但我需要能够同时使用这两个库,但我还需要 C++ 知道我指的是哪一个(在某些地方我只会指非此即彼)。我这样做的原因是因为我正在制作自己的库,并且我想为我的函数命名,但它们与我包含的其他库中的函数冲突,更糟糕的是,有些我的库中的函数实际上使用了其他人库中具有相同名称的函数。

顺便说一下,我的库只是一个 .h/.cpp 文件。此外,在调用 MY 函数时,我不想要任何额外的行李,例如 myNameSpace::myFunc()。我只想称它为 myFunc()。但是,我不介意使用命名空间调用其他人的函数(尽管我不想修改他们的库以防我破坏某些东西)。(顺便说一句,我对 C++ 完全陌生)

这是我的新(测试 - 到目前为止)代码:不工作 W/错误:错误 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 回答