2016-04-28 104 views
0

我寫了一個學校項目的簡短模板方法,並得到我不明白的奇怪的語法錯誤。他們與我聲明的模板有關(在註釋包含模板的頭文件時,main()中的所有錯誤消失),但我無法弄清楚發生了什麼。我包含和「intersectHeader.h」並使用std命名空間。 在我的main()函數中,我所做的全部是聲明一個向量:模板方法中的語法錯誤,我不明白

vector v1; - 錯誤:C2065 '串' 未聲明的標識符, C2065 'V1' 未聲明的標識符,C2065 '向量' 未聲明的標識符

這是模板:

template<typename T> 
vector<T> intersect(const vector<T> & v1, const vector<T> & v2)  
{  
    vector<T> resultVector; 

    bool duplicate = false; 

    for (int i = 0; i < v1.size(); i++) 
    { 
     duplicate = false; 
     for (int j = 0; j < v2.size(); j++) 
     { 
      if (v1[i] == v2[j]) 
      { 
       for (int a = 0; a < resultVector.size(); a++) 
       { 
        if (v1[i] == resultVector[a]) 
        { 
         duplicate = true; 
         break; 
        } 
       } 

       if (!duplicate) 
       { 
        resultVector.push_back(v1[i]); 
       } 
      } 
     } 
    } 

    return resultVector; 
} 

上面給了我這些錯誤:

C2988無法識別的模板聲明/定義,C2143語法 錯誤缺少';'在'<'之前,C2059語法錯誤'<'。所有這一切都發生在第二行

「矢量相交(常量向量& V1, const的載體& V2)」

+0

我不知道爲什麼在<>未示出的代碼,但所述聲明是:模板 矢量相交(常量矢量&V1,常量矢量&V2)和可變矢量 resultVector; – Rick

+2

請將完整的錯誤輸出複製粘貼到問題的正文中,使用代碼格式,以便顯示所有字符。還請指出(例如評論)代碼中錯誤的位置。如果可能的話,請嘗試創建一個[最小化,完整和可驗證示例](http://stackoverflow.com/help/mcve),您可以向我們顯示。 –

+0

至少顯示所有包含和「使用命名空間」的東西。或者更好的是,刪除所有的使用指令,並用相應的限定符爲相關名稱加前綴。 – Mat

回答

1

你不應該做任何的頭文件using namespace std。您應該將明確的std::名稱空間添加到您的模板實現中,並且問題應該消失(假定您已包含適當的標準庫標頭)。

+0

解決了它,非常感謝! – Rick

+0

@瑞克:不客氣。請點擊左側的複選標記,考慮「接受」這個答案。歡迎來到SO。 –