2012-03-04 112 views
4

我正在寫一個比較std :: strings的模板類函數。 std :: string是模板參數。我的問題是,我不能比較兩個常量字符串與「==」運算符,然後我想我創建兩個非常量臨時字符串變量來執行比較,但它仍然無法編譯。不知道爲什麼。二進制'==':沒有找到運算符類型'std :: string'(或沒有可接受的轉換)的操作符

類VGraph被實例化爲VGraph<std::string, std::string> myGraph;

template <typename V, typename E> 
size_t VGraph<V, E>::find(const V& vert) 
{ 
    V temp = vert; // (1) 
    for (size_t i=0; i<graph.size(); i++) 
    { 
     V noneConst = graph[i].getVertex(); // (2) 
     if (temp==noneConst)// I think broblem is here, and tried to fix using (1)(2) 
      return i; 
    } 
    return graph.size(); 
} 

相關函數的原型

template <typename V, typename E> 
const V& VVertex<V, E>::getVertex(); 
+8

您使用的實例化中的V是什麼? – PlasmaHH 2012-03-04 22:33:00

+3

您可以比較兩個常量字符串或兩個常量引用字符串完全正常,您的問題必須在其他地方。 – cooky451 2012-03-04 22:35:07

+0

@CaptainGiraffe:我假設錯誤消息是'binary'==':找不到操作符找到'std :: string'類型的左手操作數(或者沒有可接受的轉換)。否則,這個問題的標題將非常違反直覺。 – ruakh 2012-03-04 22:37:04

回答

18

你可能忘了一個明確的:

#include <string> 

std::string類是由一個又一個頭文件中定義你包括在內,但不包括運營商==

+0

這是一個模板類。我是否需要包含實例類頭文件?我想我需要在客戶端代碼中包含字符串,對吧? – Howard 2012-03-04 23:53:29

+0

是的,你是對的。客戶代碼忘記包括。奇怪的是,當使用VGraph 聲明類實例時(不包括頭),它通過了編譯,這讓我忽略了這個問題。 – Howard 2012-03-05 00:13:33

相關問題