2013-04-09 79 views
0

我的程序中包含兩個函數庫,它們的函數名都相同,但我需要能夠使用這兩個函數,但我也需要C++來知道我指的是哪一個(在某些地方我只會指的是一個或另一個)。我這樣做的原因是因爲我正在製作自己的圖書館,並且想爲自己的函數設置特定的名稱,但它們與我包含在其他人的圖書館中的函數相沖突,並且使情況更糟糕我的函數在我的函數庫中實際使用了其他具有相同名稱的人類函數庫中的函數。如何告訴C++使用不同的函數(與另一個函數具有相同的名稱)?

順便說一下,我的庫只是一個.h/.cpp文件。另外,當調用我的功能時,我不想要任何額外的行李,如myNameSpace :: myFunc()。我只想稱它爲myFunc()。但是,我並不介意使用名稱空間來調用其他人的函數(儘管我不想修改他們的函數庫以防我破壞某些東西)。 (我完全新的C++順便說一句)

HERES MY NEW(TEST - SO FAR)編號:不工作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; 
     } 
    } 

otherslib.h

#pragma once 

    int myFunc(); 

otherslib.cpp

#include "otherslib.h" 

    int myFunc(){ 
     return 0; 
    } 
+7

使用一個命名空間。這就是他們的目的。 – chris 2013-04-09 03:56:56

回答

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(); 
    } 
} 
+0

有什麼辦法可以避免使用命名空間來調用我的函數嗎?我寧願使用名稱空間來調用其他人myFunc,因爲我不會像我一樣經常使用它們的函數(並且我只會在my_library.cpp中使用它們的myFunc())。 – Tez 2013-04-09 04:02:50

+0

你可以在特定範圍內使用你的名字空間,這將減少你每次指定它。你可以將他們的代碼包含到一個名稱空間中,但這可能會導致語義稍微不同於他們的意圖。 – ssube 2013-04-09 04:14:10

+0

某些原因,它不工作 - 獲取錯誤:'模糊調用重載函數' – Tez 2013-04-09 04:45:01

相關問題