4
我明白爲什麼如果沒有使用名稱空間,以下將是一個問題。這個電話確實是模棱兩可的。我以爲「使用stD :: swap;」會定義使用哪種方法。重載函數的調用是不明確的,雖然不同的命名空間
爲什麼它適用於「int」而不是「class」?
#include <memory>
namespace TEST {
class Dummy{};
void swap(Dummy a){};
void sw(int x){};
}
namespace stD {
void swap(TEST::Dummy a){};
void sw(int x){};
class aClass{
public:
void F()
{
using stD::swap;
TEST::Dummy x;
swap(x);
}
void I()
{
using stD::sw;
int b = 0;
sw(b);
}
};
}
這是錯誤消息:
../src/Test.h: In member function ‘void stD::aClass::F()’:
../src/Test.h:26:9: error: call of overloaded ‘swap(TEST::Dummy&)’ is ambiguous
swap(x);
^
../src/Test.h:26:9: note: candidates are:
../src/Test.h:17:6: note: void stD::swap(TEST::Dummy)
void swap(TEST::Dummy a){};
^
../src/Test.h:10:6: note: void TEST::swap(TEST::Dummy)
void swap(Dummy a){};
^
我非常感謝你提前一個答案。
值得一提的是,如果'F'不在'stD'中,它會調用'TEST :: swap'。 – Rakete1111
謝謝!這完全回答了我的問題。現在這很清楚。 – Lycosa