c++ - 无法解释的无法在模板中比较 C++ 中的字符串

标签 c++ string templates

我的标准是

error C2678: binary '==' : no operator found which takes a left-hand operand of type 'std::string' (or there is no acceptable conversion)

错误。但是,我已经包含了 string,我没有明显的方法来解释这一点。

这是我的代码。

#include <string>
#include <vector>
#include <type_traits>

// [...]
template <typename T>
class Graph {
private:
    // [...]
    struct Vertex {
        T name;
        // [...]
    };
    std::vector<Vertex> verts;
public:
    // [...]
    template <typename P>
    int vertex(P item) {
        if (std::is_same<P,T>::value) {
            for (unsigned int i = 0; i < verts.size(); i++){
                if (verts[i].name == item) {
                    return i;
                }
            }
        } else if (std::is_same<P,int>::value) {
            return item;
        }
        return -1;
    }
}

编译器为VS2012,平台为Windows 8.1 64bit。

最佳答案

做出有根据的猜测,在 if (verts[i].name == item)似乎verts[i].name已被实例化为 std::string同时item尚未实例化为 std::string .因此,编译器合理地提示没有重载运算符来比较 std::string。反对X .

更新:

另一个猜测是 X正在被实例化为 intdouble因为如果它被实例化为 std::string编译器会提示尝试转换 std::stringintGraph::vertex() 中归还成员函数。

关于c++ - 无法解释的无法在模板中比较 C++ 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23717362/

相关文章:

c++ - 如何计算 C++ Visual Studio 中两个日期之间的天数?

C++ 2D 如何将 "stick"宇宙飞船上的排气 Sprite 并允许它相应地旋转?

c - 在结构中存储多维数组

java - 将声音文件链接到字符串值

c++ - 从基类转换为未知的派生类

c++ - 如何从模板结构创建二维数组

c++ - 如何使用 C++ 中的 DirectX 11 高效轻松地渲染单个区域中的所有 Actor ?

c++ - 为什么指向 vector 元素的成员会导致段错误?

regex - 需要识别邮政编码范围

javascript - 使用 RequireJS 模块化 CSS 样式表