簡體   English   中英

C ++中的模板類?

[英]Template class in c++?

我正在使用模板類來設置交換函數的數據類型。 在代碼中,如果我將函數名初始化為小寫字母,則會拋出一個錯誤call of overloaded 'swap(double&, double&) is ambiguous錯誤call of overloaded 'swap(double&, double&) is ambiguous但是當我將函數名初始化為大寫時,它可以正常工作。 如果有人能解釋我為什么會發生,將不勝感激。 這是我的代碼

#include<iostream>

using namespace std;
template <class T>
void swap(T &a,T &b)
{
    T temp;

    temp = a;
    a = b;
    b = temp;
}

int main()
{
    double value1 = 2.44;
    double value2 = 6.66;

    cout<<"\tBefore swap \n";
    cout<<"Value 1 = "<< value1 <<"\tValue 2 = " << value2 <<"\n";

    swap(value1,value2);

    cout<<"\tafter swap \n";
    cout<<"Value 1 = "<< value1 <<"\tValue 2 = "<<value2;
}

代替

swap(value1,value2);

采用

::swap(value1,value2);

這將解決名稱空間和歧義性問題。

因為已經有一個標准的庫函數std::swap http://www.cplusplus.com/reference/algorithm/swap/,所以您的編譯器可能不喜歡它? 您可以通過using namespace std;

更改swap功能的名稱,因為std::swap已經存在。

或者,您可以將其放在單獨的名稱空間中,並使用范圍解析運算符“ ::”將您的名稱與標准名稱區分。

這是在使用namespace std;時發生的情況namespace std; 您可能需要更具體地使用:

using std::cout;
using std::endl;
using std::cin;

已經使用模板'swap'而不是'SWAP'定義了標准庫函數,它實際上位於std名稱空間下,但是由於您具有using namespace std行,因此它沒有std ::前綴。

如您所見,由於本例中可能發生名稱沖突,因此使用using名稱空間std並非總是一個好的選擇。 通常,除非存在真正的原因(名稱空間存在是出於某種原因)以防止名稱沖突,否則通常不應該使用using指令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM